├── README.md └── utility └── http-injector ├── etc ├── carma │ ├── openvpn │ │ ├── mct1.tcpvpn.com-443.login │ │ └── mct1.tcpvpn.com-443.ovpn │ └── payload │ │ └── axis-hitz-bbm.ohi └── hotplug.d │ └── iface │ └── 99-carma ├── readme.md └── usr └── bin └── http-injector /README.md: -------------------------------------------------------------------------------- 1 | # CMod-OpenWrt 2 | -------------------------------------------------------------------------------- /utility/http-injector/etc/carma/openvpn/mct1.tcpvpn.com-443.login: -------------------------------------------------------------------------------- 1 | tcpvpn.com-mc-mct-14-18 2 | 1 -------------------------------------------------------------------------------- /utility/http-injector/etc/carma/payload/axis-hitz-bbm.ohi: -------------------------------------------------------------------------------- 1 | {"buffer": 32768, "info": "AIXS BUG BBM Limit 1GB 1hari by master Carma", "payload": "GET http://download.cdn.oly-ap.blackberry.com/ HTTP/1.1[crlf]GET http:// download.cdn.oly-ap.blackberry.com[crlf]Connection: Keep-Alive[crlf][cr][crlf][split]CONNECT [host_port] [protocol][crlf]Content-Length: 9999999999[crlf][crlf]", "proxy": {"host": "10.4.0.10", "port": 8080}} -------------------------------------------------------------------------------- /utility/http-injector/etc/hotplug.d/iface/99-carma: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | . /usr/share/libubox/jshn.sh 5 | 6 | if [ "$ACTION" = ifup -a "$INTERFACE" = "3g" ]; then 7 | # madplay /etc/carma/tts/interface-3g-connected.mp3 8 | connection_type="$(uci get carma.@network[0].type)" 9 | 10 | if [ "$connection_type" = "inject" ]; then 11 | 12 | payload="$(uci get carma.@network[1].payload)" 13 | tunnel="$(uci get carma.@network[1].tunnel)" 14 | listen="$(uci get carma.@network[1].listen)" 15 | ip="$(ifconfig 3g-3g | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')" 16 | 17 | json_load "$(cat /etc/carma/payload/$payload)" 18 | json_select proxy 19 | json_get_var proxy host 20 | 21 | route del $proxy 22 | route add $proxy gateway $ip 23 | 24 | sleep 1 25 | 26 | kill -9 "$(pidof http-injector)" 27 | 28 | sleep 1 29 | 30 | /usr/bin/http-injector /etc/carma/payload/$payload -l $listen & 31 | 32 | sleep 1 33 | 34 | if [ "$tunnel" = "openvpn" ]; then 35 | 36 | kill -9 "$(pidof openvpn)" 37 | 38 | sleep 1 39 | 40 | config="$(uci get carma.@tunnel[0].config)" 41 | 42 | openvpn --config /etc/carma/openvpn/$config --http-proxy 127.0.0.1 $listen --http-proxy-retry --auth-user-pass /etc/carma/openvpn/${config%.ovpn}.login --daemon & 43 | fi 44 | 45 | fi 46 | fi 47 | 48 | # if [ "$ACTION" = ifdown -a "$INTERFACE" = "3g" ]; then 49 | # touch /tmp/lol 50 | # fi 51 | -------------------------------------------------------------------------------- /utility/http-injector/readme.md: -------------------------------------------------------------------------------- 1 | # HTTP-INJECTOR OPENWRT 2 | 3 | ### packages yang wajib di install 4 | * python 2.7 5 | * python-codecs 6 | * python-logging 7 | * python-base 8 | * python-light 9 | ```` 10 | opkg update 11 | opkg install python-base python-light python-logging python-codecs 12 | ```` 13 | * openvpn 14 | * openvpn-openssl 15 | ```` 16 | opkg update 17 | opkg install openvpn-openssl 18 | ```` 19 | 20 | 1. install semua package yang dibutuhkan 21 | 2. buat interface openvpn 22 | ```` 23 | uci set network.openvpn=interface 24 | uci set network.openvpn.proto='none' 25 | uci set network.openvpn.ifname='tun0' 26 | 27 | uci commit 28 | ```` 29 | 3. atur firewall untuk interface openvpn yang baru saja dibuat 30 | *firewall zone rule* 31 | ```` 32 | uci add firewall.zone 33 | uci set firewall.@zone[-1].name='openvpn' 34 | uci set firewall.@zone[-1].output='ACCEPT' 35 | uci set firewall.@zone[-1].forward='REJECT' 36 | uci set firewall.@zone[-1].input='ACCEPT' 37 | uci set firewall.@zone[-1].masq='1' 38 | uci set firewall.@zone[-1].mtu_fix='1' 39 | uci set firewall.@zone[-1].network='openvpn' 40 | ```` 41 | *firewall forwading rule* 42 | ```` 43 | uci add firewall forwarding 44 | uci set firewall.@forwarding[-1].src='lan' 45 | uci set firewall.@forwarding[-1].dest='openvpn' 46 | 47 | uci commit 48 | ```` -------------------------------------------------------------------------------- /utility/http-injector/etc/carma/openvpn/mct1.tcpvpn.com-443.ovpn: -------------------------------------------------------------------------------- 1 | client 2 | dev tun 3 | proto tcp 4 | remote 128.199.205.250 443 5 | resolv-retry infinite 6 | nobind 7 | tun-mtu 1500 8 | tun-mtu-extra 32 9 | mssfix 1450 10 | persist-key 11 | auth-user-pass 12 | comp-lzo 13 | reneg-sec 0 14 | verb 3 15 | 16 | 17 | 18 | -----BEGIN CERTIFICATE----- 19 | MIIE4jCCA8qgAwIBAgIJAKvYUNvHeRdTMA0GCSqGSIb3DQEBCwUAMIGmMQswCQYD 20 | VQQGEwJpZDELMAkGA1UECBMCaWQxEzARBgNVBAcTCnRjcHZwbi5jb20xEzARBgNV 21 | BAoTCnRjcHZwbi5jb20xEzARBgNVBAsTCnRjcHZwbi5jb20xEzARBgNVBAMTCnRj 22 | cHZwbi5jb20xEzARBgNVBCkTCnRjcHZwbi5jb20xITAfBgkqhkiG9w0BCQEWEmNv 23 | bnRhY3RAdGNwdnBuLmNvbTAeFw0xNjExMjkwMTI3MTJaFw0yNjExMjcwMTI3MTJa 24 | MIGmMQswCQYDVQQGEwJpZDELMAkGA1UECBMCaWQxEzARBgNVBAcTCnRjcHZwbi5j 25 | b20xEzARBgNVBAoTCnRjcHZwbi5jb20xEzARBgNVBAsTCnRjcHZwbi5jb20xEzAR 26 | BgNVBAMTCnRjcHZwbi5jb20xEzARBgNVBCkTCnRjcHZwbi5jb20xITAfBgkqhkiG 27 | 9w0BCQEWEmNvbnRhY3RAdGNwdnBuLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP 28 | ADCCAQoCggEBALRjqbK5AYCA7HQdjFvNqOyNRfHuD7YElSzU78U8AfUTJu8HSJwr 29 | fv8AQ0deAx6NYXj2FJHX5bvSmjBhfr6uJCXiaNZN25ayOOtgj63WDZVj/gevv/do 30 | I2SEFNUbwk26gbfwIPuCxi/9ijR0gmtQKuiYHIqOVcTVQelIv8huLE22doXTgo3U 31 | AiJPOq3ABmm6YR45s/P0NIN5deTiQqFpZ31RHa7tqUxtVPN66BMDsDOuS9B3i72Y 32 | 5Zim8cPMaPiQUuI3mBoKX0qvobccUHV/F4GYLKF4jT0kMZ6bKcCHT1PJnKBEu+C3 33 | qyPcvD68yzfeWY+tCJOD3AwMmlyGywDsZvsCAwEAAaOCAQ8wggELMB0GA1UdDgQW 34 | BBQuEFjLFyDuQIQw7j+OjLsS446JITCB2wYDVR0jBIHTMIHQgBQuEFjLFyDuQIQw 35 | 7j+OjLsS446JIaGBrKSBqTCBpjELMAkGA1UEBhMCaWQxCzAJBgNVBAgTAmlkMRMw 36 | EQYDVQQHEwp0Y3B2cG4uY29tMRMwEQYDVQQKEwp0Y3B2cG4uY29tMRMwEQYDVQQL 37 | Ewp0Y3B2cG4uY29tMRMwEQYDVQQDEwp0Y3B2cG4uY29tMRMwEQYDVQQpEwp0Y3B2 38 | cG4uY29tMSEwHwYJKoZIhvcNAQkBFhJjb250YWN0QHRjcHZwbi5jb22CCQCr2FDb 39 | x3kXUzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCcLVKqE6oM/Aof 40 | 1OlhcaOHwySgQZ/1AodoWRQhySXFC9mhoG6LOd8xJvPqDOTww/Ex/qlq1a4SoeHd 41 | xgwQgrhy/MP/3JoQzA38au+26Vfg0QhVcnOlLHC0a0WVazmEXTWHHFA5Oj6wskcg 42 | J3sDx/58U/NboV+bbjtHXQF98tFHuufcIFWJULzPiy8TVSZP5mihlAyfmgm5KHgZ 43 | GGpcsEJCe5TROLrJWdk8FrHJ+9EHIU+7uv5O90eXEb+45tQm998ocw4KLJzvInPo 44 | rRlW01Sh/gAg8kbrMmohGhfogqQDHu67KIPVjaFQecZBFAjvZSH2tgYo/fF/K9Lr 45 | DFLlhBrL 46 | -----END CERTIFICATE----- 47 | 48 | 49 | -------------------------------------------------------------------------------- /utility/http-injector/usr/bin/http-injector: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import socket 4 | import select 5 | import time 6 | import argparse 7 | import json 8 | import logging 9 | import sys 10 | 11 | logging.basicConfig( 12 | filename='/tmp/http-injector.log', 13 | filemode='w', 14 | format='%(asctime)s %(message)s', 15 | level=logging.DEBUG) 16 | 17 | # forward trafic to remote proxy 18 | class Forward: 19 | def __init__(self): 20 | self.forward = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 21 | 22 | def start(self, host, port): 23 | try: 24 | self.forward.connect((host, port)) 25 | return self.forward 26 | except Exception, e: 27 | print e 28 | return False 29 | 30 | 31 | class TheServer: 32 | input_list = [] 33 | channel = {} 34 | channel_ = {} 35 | request = {} 36 | 37 | # init TheServer Class 38 | def __init__(self, config, port): 39 | 40 | payload_file = json.load(config) 41 | 42 | payload = payload_file['payload'] 43 | payload = payload.replace('[crlf]', '\r\n') 44 | payload = payload.replace('[lf]', '\n') 45 | payload = payload.replace('[cr]', '\r') 46 | payload = payload.replace('[protocol]','HTTP 1.0') 47 | 48 | self.payload = payload 49 | self.forward_to = (payload_file['proxy']['host'], payload_file['proxy']['port']) 50 | self.buffer_size = payload_file['buffer'] 51 | 52 | self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 53 | self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 54 | self.server.bind(('0.0.0.0', port)) 55 | self.server.listen(200) 56 | 57 | def on_accept(self): 58 | forward = Forward().start(self.forward_to[0], self.forward_to[1]) 59 | clientsock, clientaddr = self.server.accept() 60 | if forward: 61 | self.input_list.append(clientsock) 62 | self.input_list.append(forward) 63 | self.channel[clientsock] = forward 64 | self.channel[forward] = clientsock 65 | self.channel_[clientsock] = forward 66 | self.channel_[forward] = forward 67 | else: 68 | print "Proxy tidak merespon", 69 | print "Closing connection with client side", clientaddr 70 | clientsock.close() 71 | 72 | def on_close(self): 73 | self.input_list.remove(self.s) 74 | self.input_list.remove(self.channel[self.s]) 75 | 76 | out = self.channel[self.s] 77 | 78 | self.channel[out].close() 79 | self.channel_[out].close() 80 | 81 | self.channel[self.s].close() 82 | self.channel_[self.s].close() 83 | 84 | del self.channel[out] 85 | del self.channel_[out] 86 | 87 | del self.channel[self.s] 88 | del self.channel_[self.s] 89 | 90 | def on_execute(self): 91 | netdata = self.netdata 92 | if netdata.find("CONNECT") == 0: 93 | req = netdata.split('HTTP')[0] 94 | req = req.split(' ') 95 | host_port = req[1].split(':') 96 | 97 | proto = netdata.split('HTTP')[1] 98 | print proto.replace('/', '') 99 | 100 | payloads = self.payload 101 | payloads = payloads.replace('[host_port]', req[1]) 102 | payloads = payloads.replace('[host]', host_port[0]) 103 | payloads = payloads.replace('[port]', host_port[1]) 104 | # print host_port[1] 105 | if payloads.find('[split]') <> -1: 106 | pay = payloads.split('[split]') 107 | self.request[self.channel[self.s]] = pay[1] 108 | netdata = pay[0] 109 | else: 110 | netdata = payloads 111 | print netdata 112 | try: 113 | self.channel[self.s].send(netdata) 114 | except Exception, e: 115 | print e 116 | 117 | def on_outbounddata(self): 118 | netdata = self.netdata 119 | if netdata.find('HTTP/1.') == 0: 120 | # print netdata 121 | if self.payload.find('[split]') <> -1: 122 | if self.request[self.s] != '': 123 | time.sleep(0.5) 124 | print self.request[self.s] 125 | self.channel_[self.s].send(self.request[self.s]) 126 | self.request[self.s] = '' 127 | netdata = 'HTTP/1.1 200 Connection established\r\n\r\n' 128 | try: 129 | self.channel[self.s].send(netdata) 130 | except Exception, e: 131 | print e 132 | 133 | def main_loop(self): 134 | self.input_list.append(self.server) 135 | while 1: 136 | ss = select.select 137 | inputready, outputready, exceptready = ss(self.input_list, [], []) 138 | 139 | for self.s in inputready: 140 | if self.s == self.server: 141 | self.on_accept() 142 | break 143 | try: 144 | self.netdata = self.s.recv(self.buffer_size) 145 | except Exception, e: 146 | self.netdata ='' 147 | if len(self.netdata) == 0: 148 | self.on_close() 149 | else: 150 | if cmp(self.channel[self.s],self.channel_[self.s]): 151 | self.on_outbounddata() 152 | else: 153 | self.on_execute() 154 | 155 | 156 | # initiate main program 157 | if __name__ == '__main__': 158 | parser = argparse.ArgumentParser( 159 | prog='http-injector', 160 | description='Python Version of HTTP-INJECTOR') 161 | parser.add_argument( 162 | 'config', metavar='payload', 163 | type=argparse.FileType('r'), 164 | help='payload file') 165 | parser.add_argument( 166 | '-l', dest='listen', nargs='?', const=1989, 167 | help='listen port', default=1989) 168 | args = parser.parse_args() 169 | 170 | server = TheServer(args.config, int(args.listen)) 171 | try: 172 | server.main_loop() 173 | except KeyboardInterrupt: 174 | print "Ctrl C - Stopping server" 175 | 176 | 177 | --------------------------------------------------------------------------------