1625-5 王子昂 总结《2017年8月4日》 【连续第306天总结】
A. RouterScan逆向
B.
IDA结合OD查明了DetectRouter401模块的功能,与200模块不同,401是在Detect模块中对照数据查找特征,不符合则直接进行exp尝试登陆,登陆成功后通过GetInfo模块获取信息;而200模块是在Detect模块中对比特征,符合则确认型号,然后在GetInfo模块中进行exp,成功后获取信息
至此ScanRouter的大致流程就清楚了,下一步明确各个函数的参数从而通过python进行包装调用
Initialize
初始化
不接受参数
返回值为-1/0,表示是否成功
GetModuleCount
获取模块数量
接收一个缓冲区参数,在其中存放模块数量
返回值为-1/0
GetModuleInfoW
获取模块信息
接收两个参数,分别为模块序号和缓冲区
缓冲区使用(1+8+8)个字节,分别存放选中状态、模块名、显示名称
返回值为-1/0
SetParamW
设置参数
接收两个参数,分别为参数序号和内容
初始化时为(0,0),(1,1),(2,0x5ECA70),(3,0x5F2460)
具体功能未知
返回值为-1/0
GetParamW
获取参数
接收四个参数
第1、3个一般为4、5等看起来为序号的数
第2、4个一般为相差1个字节的相邻缓冲区
具体功能未知
PrepareRouter
扫描准备
接收四个参数,具体未知
返回值为-1/0
ScanRouter
开始扫描
接收一个参数,具体未知
返回值为-1/0
FreeRouter
释放缓存
接收一个参数,与ScanRouter的参数相同
返回值为-1/0
剩下的问题在于ScanRouter中的输出内容都是通过一个函数sub_4DAFC8输出的,它应该是针对GUI的列表项来输出的
在OD中能看到堆栈中存放着端口、ip等信息,但不明白如何传入导出函数,明天再看看GUI的ID啥的
C. 明日计划
RouterScan逆向