170803 逆向-RouterScan(7)

来源:互联网 发布:java安装时出现错误 编辑:程序博客网 时间:2024/04/29 15:16

1625-5 王子昂 总结《2017年8月3日》 【连续第305天总结】
A.RouterScan逆向
B.
查看了一下detect200模块,在OD中跟踪发现是在之前得到的http数据中与特征进行对比,从而确定型号
中间出了点岔子,修改了之前以为连接的函数名connect_port,基本确定应该是查找字符串的函数,结果IDA就开始在F5反编译时报positive sp value has been found的错误
查找了一下应该是堆栈平衡的问题,开启stack pointer显示后可以看出,调用connect_port之后都会剩下0xC的堆栈未平衡。通过ALT+K可以手动修正,修改了几个以后觉得太慢,拖到整个函数的最后发现累加起来差了几千比特,这手动修正得累死
遂思考了一下,先修正connect_port的堆栈平衡,然后删除再创建,强制重新分析detect200函数即可
准备结束写流程的时候突然想起来,之前有getinfo200和getinfo401两种模块,那detect200应该也有另一种分支的detect401模块吧,在mod_routerscan中看了一眼,果然有这个sub
那么明天再分析一下401和200的不同,看看是否只是函数和爆破账户密码不同的区别

中间随便试了一下py调用dll的方法
通过ctypes模块,可以装载dll,但是注意__stdcall和__cdecl的装载方法是不同的
__stdcall:
  ctypes.windll.loadlibrary(“xxx.dll”)
  或
  ctypes.WinDLL(“xxx.dll”)
__cdecl:
  ctypes.cdll.loadlibrary(“xxx.dll”)
  ctypes.CDLL(“xxx.dll”)
如果调用约定不合的话会报奇奇怪怪的错误
调用了Initialize和GetModuleCount两个函数尝试了一下,由于后者需要一个dword指针参数来作为缓冲区,刚开始调用约定装错了,导致无论怎么试都花式报错:要不是不接受参数,要不是长度不对;后来突然在IDA中看到这个函数的定义明明是cdecl,修正以后用哪个参数都大差不离可以正确返回结果“6”了
C. 明日计划
200和401两种模块的具体区别

原创粉丝点击