好友
阅读权限30
听众
最后登录1970-1-1
|
骑龟赛跑
发表于 2018-11-1 10:30
本帖最后由 骑龟赛跑 于 2018-11-1 11:23 编辑
定时弹窗的去除
思路:定时弹窗是会通过新的线程来操作的.可以在OD的日志里查找线程的创建与执行,销毁过程.顺藤摸瓜式的找到线程创建代码,直接nop掉,就行.
运行一次程序让程序完成弹窗.到日志查看线程日志.
看到"7C4106E9"地址创建的,那么双击该行代码
,直接来到该地址(此处为系统代码),直接下断点(F2),日志显示的两条线程创建,都是通过这个地址.所以下一个断点就行了.
然后重新载入程序,让他运行起来,会发现停在"7C8106E9"处了,这时候就单步跟踪下去,再jmp前,看堆栈窗口,里面就是我们要找的地址记录下"0x004010A0",
运行起来,程序又停在了"7C8106E9"处,这是第二个线程要初始化了,同样单步执行到jmp,看堆栈,记录下我们要的地址"0x00401290".
好了,这时候有没有人想,我直接nop掉"7C8106E9"的代码不就可以了吗?
其实我也是这么想的,但是这是系统代码,我们nop了,系统其他程序怎么办?系统怎么办?会崩了吧.所以我们还是对程序代码下手好了.
然后我们Ctrl+G,来到这两个地址看一下,学过编程的都知道Sleep是跟线程相关的,那么我们直接nop掉他,以及他的参数.
至于几个参数,你可以查下开发文档,或者清除所有断点,重新给这两个地址下断.重载程序,单步跟踪一下,看下堆栈就知道了.
我们直接给这两行代码nop掉
.另一处的创建线程也nop掉,
右键"复制到可执行文件","所有修改","全部复制",
右键"保存文件",完成.
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|