Results 1 to 2 of 2

Thread: gproxy

  1. #1
    Join Date
    2013-Mar
    Posts
    27

    gproxy

    original post is here:
    http://www.hackforums.net/showthread...ghlight=gproxy


    Autoit script to use a remote pc as proxy.We are compiling this script as gproxy.exe.
    Then we upload gproxy.exe,plink.exe (ssh client) and config.ini to remote host.After running gproxy exe
    (locally running bitwise ssh server)

    plink.exe -R 8080:127.0.0.1:8080 -R 8081:127.0.0.1:8081 myip -l test -pw 123456

    it connects to our ssh server with this command.It works on port 8080 for normal proxy but
    ssl proxy on port 8081 doesnt work.
    any idea?


    config.ini:

    [SYSTEM]
    PROXYPORT=8080
    PROXYIP=127.0.0.1
    PROXYPORTSSL=8081

    autoit script:


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=gproxy.exe
    #AutoIt3Wrapper_Compression=4
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    TCPStartup()
    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #include <GUIEdit.au3>
    #Include <Array.au3>
    #Include <File.au3>
    #include <WindowsConstants.au3>

    Opt("GUIOnEventMode" , 1)
    Opt("TrayAutoPause",0)
    Opt("TrayMenuMode",3)
    Opt("TrayOnEventMode",1)

    Global $ini = @ScriptDir & "config.ini"
    Global $mainarray[30][10]
    Global $proxysocket , $proxysocketssl
    Global $GUISHOW = 1

    $mainarray[0][0] = "Hostport"
    $mainarray[0][1] = "Clientsocket"
    $mainarray[0][2] = "Hostsocket"
    $mainarray[0][3] = "Request"
    $mainarray[0][4] = "Hostname"
    $mainarray[0][5] = "Timerhandle connection"
    $mainarray[0][6] = "Blocked"
    $mainarray[0][7] = "State"
    $mainarray[0][8] = "connection type"
    $mainarray[0][9] = "req count"



    Global $gui = GUICreate("ProxyServer v0.2",700,700)
    $DEBUG=GUICtrlCreateEdit("" , 5 , 30 , 500 ,670,BitOr($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
    GUICtrlSetLimit(-1 , 2000000000000000)
    Global $button_debug_clear = GUICtrlCreateButton("Clear",5,5,90,20)
    GUICtrlSetOnEvent($button_debug_clear,"_debug_clea r")
    GUICtrlCreateLabel("Listening IP:",515,40,70,20)
    GUICtrlCreateLabel("Port HTTP:",515,60,70,20)
    GUICtrlCreateLabel("Port HTTPS:",515,80,70,20)
    Global $input_proxyip = GUICtrlCreateInput("",590, 40,100,20)
    Global $input_proxyport = GUICtrlCreateInput("",590,60,60,20)
    Global $input_proxyportssl = GUICtrlCreateInput("",590,80,60,20)
    Global $button_proxy_save = GUICtrlCreateButton("Save and Restart",515,140,180,20)
    GUICtrlSetOnEvent($button_proxy_save,"_mainsocket_ save")

    Global $checkbox_debug = GUICtrlCreateCheckbox("Debugmode", 515 , 240, 120, 20)
    Global $checkbox_debug_save = GUICtrlCreateCheckbox("Save Debug to file", 515 , 260, 120, 20)
    Global $checkbox_debug_content = GUICtrlCreateCheckbox("Show traffic content", 515 , 280, 120, 20)
    Global $button_debug_content = GUICtrlCreateButton("Binary to String",515,320,120,19)
    GUICtrlSetOnEvent($button_debug_content,"_debug_bi nary")
    Global $button_debug_array = GUICtrlCreateButton("show mainarray",515,340,120,19)
    GUICtrlSetOnEvent(-1,"_show_array")


    Global $tray_showgui = TrayCreateItem("Show gui")
    TrayItemSetOnEvent($tray_showgui,"_gui_show")

    GUISetOnEvent($GUI_EVENT_CLOSE,"_quit")
    GUISetState(@SW_HIDE,$gui)

    _mainsocket_create()

    While 1
    $newclientsock = TCPAccept($proxysocket)
    If $newclientsock <> -1 Then
    _save("] new HTTP clientconnection :" &_SocketToIP($newclientsock) &@CRLF)
    _clientconnection_to_mainarray($newclientsock,80," HTTP")
    EndIf
    $newclientsockssl = TCPAccept($proxysocketssl)
    If $newclientsockssl <> -1 Then
    _save("] new HTTPS clientconnection :" &_SocketToIP($newclientsockssl) &@CRLF)
    _clientconnection_to_mainarray($newclientsockssl,4 43,"HTTPS","start")
    EndIf
    ;--Recieving Req from Client
    For $i = 1 To UBound($mainarray) -1
    If $mainarray[$i][1] <> "" Then
    $request = TCPRecv($mainarray[$i][1],100000)
    If @error Then

    _save("] Client " & $i & " closed connection after " & Floor(TimerDiff($mainarray[$i][5])) & " ms" & @CRLF)
    _mainarray_deleteclient($i)
    EndIf

    If $request <> "" Then
    _save("] Client " & $i & " requested" & @CRLF & @CRLF & $request & @CRLF)
    $mainarray[$i][9] += 1
    $mainarray[$i][3] = $request
    If GUICtrlRead($checkbox_debug_content) = 1 Then _save($request & @CRLF)
    EndIf
    EndIf
    Next

    ;--connecting and sending Req to Host
    For $i = 1 To UBound($mainarray) -1
    If $mainarray[$i][3] <> "" Then
    If $mainarray[$i][2] = "" Then
    $forward = _Get_Address($mainarray[$i][3])
    _save("]" & $i &" Got Host Address : " & $forward & @CRLF)
    $mainarray[$i][6] = 0
    $mainarray[$i][4] = $forward
    If $forward = "0" Then
    _Send_Response($mainarray[$i][1],400)
    _save("]" & $i &" Host is 0 , Error 400" & @CRLF)
    Else
    $serverip = TCPNameToIP($forward)
    $serversock = TCPConnect($serverip,$mainarray[$i][0])
    If $serversock <> -1 Then
    _save("]" & $i &" Connected to Host: " & $forward & @CRLF)
    $mainarray[$i][2] = $serversock

    Else
    _save("]" & $i &" Not Connected to Host: " & $forward & @CRLF)
    _Send_Response($mainarray[$i][1],400)
    _mainarray_deleteclient($i)
    EndIf
    EndIf
    Else
    $forward = _Get_Address($mainarray[$i][3])
    If $forward <> $mainarray[$i][4] Then
    _save("]" & $i &" Host Address changed from: " & $mainarray[$i][4] & " to: " & $forward & @CRLF)
    $mainarray[$i][4] = $forward
    TCPCloseSocket($mainarray[$i][2])
    $mainarray[$i][2] = ""
    EndIf
    EndIf
    If $mainarray[$i][2] <> "" Then
    $prevlen = StringLen($mainarray[$i][3])
    $mainarray[$i][3] = _request_modify($mainarray[$i][3],$mainarray[$i][4])
    If $mainarray[$i][7] = "" Then
    ;$mainarray[$i][3] = _request_modify($mainarray[$i][3],$mainarray[$i][4])
    TCPSend($mainarray[$i][2] , $mainarray[$i][3])
    If Not @error Then
    _save("]" & $i &" Sending HTTP to Host " & $mainarray[$i][4] & " successfull prevlen:" & $prevlen & " now:" & StringLen($mainarray[$i][3]) & @CRLF)
    $mainarray[$i][3] = ""
    Else
    _save("]" & $i &" Error Sending HTTP to Host " & @CRLF)
    EndIf
    EndIf
    EndIf
    EndIf
    Next
    ;--Waiting for Response from Host and Sending to client
    For $i = 1 To UBound($mainarray) -1
    If $mainarray[$i][2] <> "" Then
    $serverresponse = TCPRecv($mainarray[$i][2],400000,1)
    If @error Then
    _mainarray_hostkillclient($i)
    EndIf
    If $serverresponse <> Binary("") Then
    If $mainarray[$i][6] = 0 Then
    _save("]" & $i &" Got Host response" & @CRLF)
    If $mainarray[$i][1] <> "" And $mainarray[$i][7] = "" Then
    TCPSend($mainarray[$i][1],$serverresponse)
    If Not @error Then
    _save("]" & $i &" Sent data to Client " & @CRLF)

    If GUICtrlRead($checkbox_debug_content) = 1 Then _save(BinaryToString($serverresponse) & @CRLF)
    EndIf
    EndIf
    ElseIf $mainarray[$i][6] = 1 Then
    TCPSend($mainarray[$i][1],"HTTP/1.1 " & "403")
    _mainarray_hostkillclient($i)
    EndIf
    EndIf
    EndIf
    Next
    ;---only for HTTPS
    For $i = 1 To UBound($mainarray) -1
    If $mainarray[$i][1] <> "" And $mainarray[$i][3] <> "" And $mainarray[$i][8] = "HTTPS" And $mainarray[$i][7] = "start" Then
    _Send_Response($mainarray[$i][1],200) ;,$data="")
    $mainarray[$i][3] = ""
    $mainarray[$i][7] = ""
    EndIf
    Next

    WEnd



  2. #2
    Join Date
    2013-Mar
    Posts
    27
    autoit script continues:


    Func _show_array()
    _ArrayDisplay($mainarray)
    EndFunc

    Func _mainsocket_save()
    IniWrite($ini,"SYSTEM","PROXYPORT",GUICtrlRead($in put_proxyport))
    IniWrite($ini,"SYSTEM","PROXYIP",GUICtrlRead($inpu t_proxyip))
    IniWrite($ini,"SYSTEM","PROXYPORTSSL",GUICtrlRead( $input_proxyportssl))
    _mainsocket_create()
    EndFunc

    Func _mainsocket_create()
    TCPShutdown()
    TCPStartup()
    $IP = IniRead($ini,"SYSTEM","PROXYIP","127.0.0.1")
    $PORT = IniRead($ini,"SYSTEM","PROXYPORT","8080")
    $PORTSSL = IniRead($ini,"SYSTEM","PROXYPORTSSL","8043")
    GUICtrlSetData($input_proxyip, $IP)
    GUICtrlSetData($input_proxyport,$PORT)
    GUICtrlSetData($input_proxyportssl,$PORTSSL)
    $proxysocket = TCPListen($IP,$PORT)
    If @error Then
    _GUICtrlEdit_AppendText($DEBUG , "] Error HTTP Proxy couldn't bind socket on IP :" & $IP & " Port :" & $PORT & @CRLF)
    Else
    _GUICtrlEdit_AppendText($DEBUG , "] HTTP Proxy listening on IP :" & $IP & " Port :" & $PORT & @CRLF)
    EndIf
    $proxysocketssl = TCPListen($IP,$PORTSSL)
    If @error Then
    _GUICtrlEdit_AppendText($DEBUG , "] Error HTTPS Proxy couldn't bind socket on IP :" & $IP & " Port :" & $PORTSSL & @CRLF)
    Else
    _GUICtrlEdit_AppendText($DEBUG , "] HTTPS Proxy listening on IP :" & $IP & " Port :" & $PORTSSL & @CRLF)
    EndIf
    EndFunc


    Func _Get_Address($text)
    If IsBinary($text) Then
    $text = BinaryToString($text)
    EndIf
    $serversock=StringSplit($text , @CRLF,1)
    For $i=1 To $serversock[0]
    If StringLeft($serversock[$i],6)="Host: " Then
    Return StringTrimLeft($serversock[$i],6)
    EndIf
    Next
    Return 0
    EndFunc

    Func _clientconnection_to_mainarray($sock,$port = 80,$type = "HTTP",$state = "")
    For $i = 1 To UBound($mainarray) -1
    If $mainarray[$i][1] = "" And $mainarray[$i][2] = "" Then
    $mainarray[$i][1] = $sock
    $mainarray[$i][0] = $port
    $mainarray[$i][5] = TimerInit()
    $mainarray[$i][7] = $state
    $mainarray[$i][8] = $type
    _save("] Added new client to mainarray , pos: " & $i & @CRLF)
    If $i + 5 > UBound($mainarray) Then ReDim $mainarray[UBound($mainarray)+5][10]
    Return
    EndIf
    Next
    EndFunc

    Func _mainarray_deleteclient($line)
    TCPCloseSocket($mainarray[$line][1])
    $mainarray[$line][0] = ""
    $mainarray[$line][1] = ""
    $mainarray[$line][3] = ""
    $mainarray[$line][4] = ""
    $mainarray[$line][5] = ""
    $mainarray[$line][6] = ""
    $mainarray[$line][7] = ""
    $mainarray[$line][8] = ""
    $mainarray[$line][9] = ""
    If $mainarray[$line][2]<> "" Then
    TCPCloseSocket($mainarray[$line][2])
    $mainarray[$line][2] = ""
    EndIf
    EndFunc

    Func _mainarray_hostkillclient($line)
    _save("]" & $line &" Connection Closed by Host after " & Floor(TimerDiff($mainarray[$line][5])) & " ms" & @CRLF)
    $mainarray[$line][2] = ""
    $mainarray[$line][4] = ""
    $mainarray[$line][5] = ""
    If $mainarray[$line][1]<> "" Then
    TCPCloseSocket($mainarray[$line][1])
    _mainarray_deleteclient($line)
    EndIf
    EndFunc

    Func _Send_Response($browsersock,$code,$data="")
    If $data="" Then
    $data=@CRLF & @CRLF
    Else
    $data=@CRLF & $data & @CRLF & @CRLF
    EndIf
    TCPSend($browsersock , "HTTP/1.0 " & $code & " Message" & $data)
    EndFunc


    Func _quit()
    TCPShutdown()
    Exit
    EndFunc

    Func _gui_show()
    If $GUISHOW = 0 Then
    Local $pw = InputBox("Enter Password","Enter Password","","*",150,130)
    If Not @error Then
    If $pw = "1234" Then
    GUISetState(@SW_SHOW)
    $GUISHOW = 1
    Return
    EndIf
    EndIf
    ElseIf $GUISHOW = 1 Then
    GUISetState(@SW_HIDE)
    $GUISHOW = 0
    Return
    EndIf
    EndFunc

    Func _save($text)
    If GUICtrlRead($checkbox_debug_save) = 1 Then
    $file = FileOpen(@ScriptDir & "log" & @Year & @MON & @MDAY & "-log.txt",9)
    FileWrite ($file,$text)
    FileClose($file)
    Endif
    If GUICtrlRead($checkbox_debug) = 1 Then _GUICtrlEdit_AppendText($DEBUG , $text)
    Endfunc

    Func _SocketToIP($SHOCKET)
    Local $sockaddr, $aRet
    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")
    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf
    $sockaddr = 0
    Return $aRet
    EndFunc ;==>SocketToIP

    Func _debug_binary()
    Local $aSel = _GUICtrlEdit_GetSel($DEBUG)
    Local $text = StringMid(GUICtrlRead($DEBUG),$aSel[0]+1,$aSel[1]-$aSel[0])
    If $text <> "" Then

    Else
    $text = InputBox("Binary to String","Enter Binary Data")

    EndIf
    If StringLower(StringLeft($text,2)) <> "0x" Then $text = "0x" & $text
    $tempfile = FileOpen(@ScriptDir & "temp.txt",2)
    FileWrite($tempfile,BinaryToString($text))
    FileClose($tempfile)
    ShellExecute(@ScriptDir & "temp.txt")
    EndFunc

    Func _debug_clear()
    GUICtrlSetData($DEBUG,"")
    EndFunc

    Func _request_modify($req,$host)
    Local $encoding = "Accept-Encoding: identity" ;deflate, gzip, compress,
    Local $reqsplit
    Local $modified_method = 0 , $modified_connection = 0 , $modified_encoding = 0
    If $req <> "" And Not IsBinary($req) Then
    $reqsplit = StringSplit($req,@CRLF,1)
    If IsArray($reqsplit) Then
    For $i = 1 to $reqsplit[0] - 1
    _save("] modifying :" & $i & " " & $reqsplit[$i])
    If StringLeft($reqsplit[$i],3) = "GET" Or StringLeft($reqsplit[$i],4) = "POST" Or StringLeft($reqsplit[$i],7) = "CONNECT" And $modified_method = 0 Then
    $reqsplit[$i] = StringReplace($reqsplit[$i],$host,"")
    $reqsplit[$i] = StringReplace($reqsplit[$i],"http://","")
    $reqsplit[$i] = StringReplace($reqsplit[$i],":443","")
    $modified_method = 1
    EndIf
    If StringInStr(Stringlower($reqsplit[$i]),"proxy-connection: keep-alive") And $modified_connection = 0 Then
    $reqsplit[$i] = "Connection: keep-alive"
    $modified_connection = 1
    EndIf
    If StringInStr(Stringlower($reqsplit[$i]),"accept-encoding") And $modified_encoding = 0 Then
    $reqsplit[$i] = $encoding
    $modified_encoding = 1
    EndIf
    _save(" -> to :" & $reqsplit[$i] & @CRLF)
    Next
    $req = _ArrayToString($reqsplit, @CRLF , 1 , Ubound($reqsplit)-1)
    EndIf
    If GUICtrlRead($checkbox_debug_content) = 1 Then
    _save("] Request modified to:" & @CRLF)
    _save($req &@CRLF)
    EndIf
    EndIf
    Return $req
    EndFunc


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •