170809 逆向-RouterScan(10)

1625-5 王子昂 总结《2017年8月9日》 【连续第311天总结】
A. RouterScan(10)
B.
由于Print_GUI(sub_4DAFC8)作为唯一输出通道,它一定有一个ListView的句柄来选择窗口,即在IDA中的v3
这里写图片描述
在该函数的头部可以发现v3来自于a1,即调用方传入的参数;不断向上追溯,最终找到exe调用导出函数ScanRouter的参数即为此句柄
由于唯一传给导出函数的参数是该句柄,那么IP和端口的输入参数就值得思考存放在哪里了
首先想到的是ini配置文件,在根目录下发现了range.txt和ports.txt,里面存放着IP和端口,但是dll真的是从它们中获取的吗?
通过打开exe后手动修改txt的值,然后StartScan的方式实验,发现仍然只有exe列表中所包含的ip和端口被扫描了
也就是说,根目录下的两个txt仅做导入/导出/保存功用,dll的参数来源于exe传入
那么dll是否通过句柄从exe的IP窗口中获取IP呢?
也不是,因为从PrepareAndScan开始就由单线程独自执行,此时应该已完成IP分配,在OD中下断可验证执行ScanRouter函数开始栈中已确定IP和端口(同时由昨天的作业也可证明,PrepareAndScan函数中进行了TCP发包的探测,因此每次执行PrepareAndScan函数都仅包含一个目标IP和端口)
对该函数进行跟踪,流程逐渐清晰:
这里写图片描述
[local.1]就是调用方传入的第一个参数,每次执行都不同

发包得到回复,即确认端口开放后继续下面的流程
首先将IP、端口和延时转成str,通过Print_GUI显示
然后执行PrepareScan:
这里写图片描述
该函数的作用主要为3个参数统一放置在[local.1]+0x48后的内存中,并申请40个字节的内存空间,中间执行了Create模块,对40个字节中的部分内容进行操作
3个参数的值分别为句柄、IP和端口
最后执行ScanRouter,参数为[local.1]+0x48的值,即句柄
跟进去发现传给real_ScanRouter的参数也仍然是该句柄
再往下跟,发现它发HTTP包的参数来源于栈中之前Print_GUI用到的IP、端口,再拼接上协议头http:\
至此可以确定,堆栈是dll的参数池,其中不仅包含了ListView的句柄,还存储了IP和端口
C. 明日计划
RouterScan逆向

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值