最近遇到一个问题,我们公司的一个对手,利用他们的软件修改了网络数据包如
http://www.soso.com/q?ie=utf-8&cid=union.s.wh&
unc=m400284_8103&w=IT%E7%94%B7%E5%86%99%E4%B8%87%E5%AD%97%E7%BD%91%E5%B8%96%E5%90%90%E6%A7%BD
这条http请求,本来这是正确的,结果在发送的时候被修改了,
http://www.soso.com/q?ie=utf-8&cid=union.s.wh&
unc=h500284_8103&w=IT%E7%94%B7%E5%86%99%E4%B8%87%E5%AD%97%E7%BD%91%E5%B8%96%E5%90%90%E6%A7%BD
因为此unc字段是根据每个用户的点击数的统计,被修改后,我们的用户就没有记录了,点击数量也会记到修改的ID上,对我们造成严重影响。
最近开始研究这个问题,想到了hook api来解决,hook send 拦截网络数据包,检查发送的数据是否正确,如果不正确就修改回来,但是经过测试后发现,hook send 无法拦截到被修改的数据包,同时也试了sendto,WASsend,都不行。
后来在论坛里看到可以通过hook NtDeviceIoControlFile来进行数据拦截,http://bbs.pediy.com/showthread.php?t=81204
这个号称是应用层最底层的抓包了,然后把这个也试了一下,还是无法拦截到网络数据包,这个可以拦截到异步的数据包。
这两种方法我都是通过远程注入的方式,注入到IE进程,进行数据包拦截。
在测试的时候发现通过wireshark抓包可以看到被修改的数据包
GET /q?ie=utf-8&cid=union.s.wh&unc=h500854_s1_a2&w=%E5%87%916%E5%85%83%E4%B8%AD500%E4%B8%87 HTTP/1.1\r\n
Accept-Language:zh-cn\r\n
Accept-Encoding:gzip,deflate\r\n
User-Agent:Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 5.1;Trident/4.0)\r\n
Host:www.soso.com\r\n
Connection:Keep-Alive\r\n
[truncated] Cookie:suid=2599556110;pgv_pvid=3408397397;pgv_flv=10.0;uin_cookie=317606359;euin_cookie=26372ABF290DAE24A0BF28765FB1A794414D5A3851F5C529;cid=union.s.wh;pgv_info=pgvReferrer=&ssid=s4201218218;ss_cidf=1;tjz_1_uid=909117214442021\r\n(这是wireshark抓到的包)
GET /q?ie=utf-8&cid=union.s.wh&unc=m400284_8103&w=%E4%B8%AD%E7%9F%B3%E5%8C%96%E7%82%BC%E6%B2%B9%E5%8E%82%E7%88%86%E7%82%B8 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)
Host: www.soso.com
Connection: Keep-Alive
Cookie: suid=2599556110; pgv_pvid=3408397397; pgv_flv=10.0; (我自己写的程序抓的包)
不知道大家有没有什么好办法,相互讨论一下,谢谢各位了!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)