写入内存值的代码怎么找?
软件地址:https://pan.baidu.com/s/17zqRSN8a_gRYD5isJSzf7gFZ主程序已经脱壳,主程序有文件名校验,不用改他名字即可,仅这个EXE文件脱壳后打开游戏可正常使用。
两个.king的dll文件:scHelper.king、scHelper2.king在这两个文件脱壳后,再次运行FZ并打开游戏即会提示“请将360保险箱等暂时退出…………”,不能正常使用,用OD分析如图:
就是00401F39这个关键跳的原因。
通过对比分析发现未脱壳前00401F39的跳转是实现了的,但是两个.KING文件脱壳后这个跳转就不实现了。影响这个跳转的是EDX,而EDX又是【EAX+1744】这个地址给的,在数据窗口中跟随这个内存地址发现未脱壳前是1,脱壳后是0,(猜测可能是有段代码对scHelper.king、scHelper2.king这两个文件的大小或者其他点进行了校验,相等就返回真1,不相等就返回假0)但是怎么才能找到是哪儿的代码给这个内存地址赋值的呢,我用了内存断点和硬件断点均断不下来。这个内存的地址是01A0A748,好像又是sckhook.dll里面的地址。
图中的那个跳转直接改了是没有用的,因为他好像还有其他代码调用了内存地址的值,必须要等于1他才能读取两个文件里面的内容,所以需要找到是哪儿写入的
请了解的朋友指点下,谢谢!
请楼主尽快按照版规,补充软件查杀截图或链接 你直接写1不就完了,干嘛要找到他在哪里写入 补上杀毒图片,,说明:软件不一定用我提供的地址,FZ、游戏、窗口化工具都可以自行百度搜索下载
本帖最后由 57907103 于 2018-6-5 22:36 编辑
补图重复了,把这个删除了吧,抱歉。。
瘾君子 发表于 2018-6-5 11:44
你直接写1不就完了,干嘛要找到他在哪里写入
非常你的回复!
我的主要目的不是直接改那个1,因为这个软件我分析了,他在网络验证时也会使用同样的方法,通过判断某个内存地址的值是1还是0进行下一步的动作。但同一个地址他可能有时是1,有时又必须是0,所以无法采取直接写死为某一个固定的1或者0,要根据恰当的时机写合适的值。所以我推测他写入的这个内存值只是在某一条件成立后的一句代码而已,他应该还有其他代码(即程序还干了其他的事),所以我必须要找到他写入的代码。欢迎朋友们提供思路,谢谢!
EAX+1744这里是0或者1决定程序的流程。 根据你截图的流程。EAX是从EDX赋值来的。所以你需要跟到EAX的值,然后偏移是1744,就是最终的地址,然后搜索一下。有多少个地方调用了这个EAX+1744, 来决定你想要实现的赋值。 Zixue 发表于 2018-6-6 00:46
EAX+1744这里是0或者1决定程序的流程。 根据你截图的流程。EAX是从EDX赋值来的。所以你需要跟到EAX的值,然 ...
EAX的值就是存域名“www.minyao.com”的地址,你说的方法对某些软件是适用的,但是这个软件不适用,根据分析我推测这个软件部分可能是这样的:
定义全局整数变量a、b
接收封包判断子程序()
如果(a<4 )
a=a+1
如果(a=1 )
如果(接收封包1正确)
获取当前时间计算出一个数据(只是一个假设,各种情况都可能),用于第2次接收封包返回信息进行对比
启动时钟2周期事件
…………‘这里还有很多其他功能方面的子程序调用
b=1
如果(a=2 )
如果(接收封包2正确)'这里要调用上面计算出的数据
获取当前时间计算出一个数据(只是一个假设,各种情况都可能),用于第3次接收封包返回信息进行对比
将scHelper.king注入游戏进程
…………‘这里还有很多其他功能方面的子程序调用
b=1
如果(a=3 )
如果(接收封包3正确)'这里要调用上面计算出的数据
获取当前时间计算出一个数据(只是一个假设,各种情况都可能),用于第4次接收封包返回信息进行对比
将scHelper2.king注入游戏进程
………… ‘这里还有很多其他功能方面的子程序调用
b=1
如果(a=4 )
如果(接收封包4正确)'这里要调用上面计算出的数据
注册热键()
………… ‘这里还有很多其他功能方面的子程序调用
b=0
a=0
时钟1周期事件()
如果(a<4 )
检测游戏进程()
如果游戏进程存在
如果(b=1)
发送封包子程序()
……
否则……
时钟2周期事件()
检测游戏进程()
如果游戏进程存在
…………
=========================
我目前找到的点都是在他的时钟周期事件里面,他判断某一变量等于1时做的事,但是他真正的流程里面还有很多其他功能代码,比如4此判断接收封包后,他都要执行一些其他操作,而将某一变量赋值为1和0供时钟周期事件使用仅是他的一句代码而已,软件要真正的执行需要满足:1、4次判断接收正确后所执行的各子程序;2、时钟周期事件里面变量成立时所执行的子程序。
所以给变量赋值使程序执行仅满足了其中一个条件,还有其他很多子程序未执行,无法达到逆向。
这FZ除了登录发送封包外,它在打开游戏后还会连续发送4次封包,而每次发送都会根据前一次发送后收到的封包是否正确进行判断,正确就会向ebx+340写入1,然后用时钟检测这个地址是1还是0,如果是1就接着发送第二个封包,这样一直发送完4个封包后,如果接收的封包都正确FZ就激活了
我的思路是写死他的发送封包,包括里面的随机密钥,然后本地服务器返回正确发送封包对应的接收封包。这样再对比关键段的跳转流程是否一致,如果一致,理论上来说FZ就成功转本地了
页:
[1]