吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11856|回复: 79
上一主题 下一主题
收起左侧

[原创] 连小白都算不上的逆向去除弹窗教程

  [复制链接]
跳转到指定楼层
楼主
没有细胞的人 发表于 2020-2-26 08:14 回帖奖励
本帖最后由 没有细胞的人 于 2020-2-26 10:30 编辑

首先这个方法非常简单,求大神嘴下留情!
话不多说,开整!
首先看一下这个软件“RegisterMe.Oops.exe”
打开后会有一个弹窗,提示我们,让我们移除这个窗口

接下来,则出现了这个程序主界面

关掉后,又会出现一个弹窗

然后,就没有然后了,,
我们今天重点来讲去除第一个弹框

既然明白了,那就开始吧!
先查下壳

嗯,没壳(注意!“MASM32 / TASM32”是一个编译器,他不是壳)
好,直接拖进OD

嗯,可以看到这个程序其实非常简单,短短二十几行代码,要破解也是非常容易的!
但是,我们还是要分析一下,
我们来看第一个弹窗
就是这个东东


00401000 >/$  6A 00         push 0x0                                 ; /pModule = NULL
00401002  |.  E8 0D020000   call <jmp.&KERNEL32.GetModuleHandleA>    ; \GetModuleHandleA


可以看到,开始调用了GetModuleHandleA函数,获取程序句柄,然后将获取的模块句柄,存放到eax寄存器当中

0040100C  |.  83F8 00       cmp eax,0x0
0040100F  |.  74 13         je short Register.00401024
00401011  |.  6A 00         push 0x0                                 ; /Style = MB_OK|MB_APPLMODAL
00401013  |.  68 7D304000   push Register.0040307D                   ; |Title = "Register Me"
00401018  |.  68 34304000   push Register.00403034                   ; |Text = "Remove the nags to register
This will make program fully registered :))"
0040101D  |.  6A 00         push 0x0                                 ; |hOwner = NULL
0040101F  |.  E8 C6010000   call <jmp.&USER32.MessageBoxA>           ; \MessageBoxA
00401024  |>  6A 0A         push 0xA


接下来有一个cmp,来比较eax和0,是否相等,但是我们知道,前面程序调用了GetModuleHandleA来获取句柄并存放到eax寄存器当中,既然如此,eax就不可能为0,也就是说,只要这个程序启动了,那么它就一定会跳转,至于为什么程序员要这么写,,,emmmm,咋也不懂,咋也不敢问{:301_1008:}  。(程序员就是让我们去除掉这个弹窗。)
emmmm,那就太简单了,有很多方法可以做到,就比如把je nop掉啊、用mov指令给eax赋值为0啊、直接nop那个call啊等等
但是,今天我们要用一种特殊的方式来实现去除这个弹窗

00401024  |> \6A 0A         push 0xA


我们可以看到,在这条指令上方的全部都是没有用的(其中也包括弹出第一个弹窗),那么我们就可以直接修改程序的入口点,把程序入口点设置在00401024的位置,就可以实现去除第一个弹窗啦!那么怎么做嘞?
我们可以点击OD上面的那个“M”(我也不知道这个M代表啥,有知道的大佬阔不阔以告诉我,嘿嘿)

然后在这里找到PE的文件头部,就是这个00400000,然后双击进来


箭头指的那个,标志着PE结构的开始
这里不得不提一下,为什么左边是C0000000而右边则是000000C0呢?
其实左边是机器读的数据,而右边使我们正常人类读的数据,机器喜欢把第一个字节放在最后,第二个字节放到倒数第二个位置······等等,就是把各字节位置倒过来而已,就比如正常人读的是12 34 56 78,而机器读的则是78 56 34 12,应该能理解吧,,,
继续,我们知道PE文件头是400000,这个Offset to PE signature就表示真正指向PE头的一个偏移地址,在这里它是C0,所以真正的PE头就是00400000+C0=004000C0
那么直接ctrl+G跟随004000C0,然后就来到了PE头部

可以看到有一个这个东东

004000E8    00100000    DD 00001000          ;  AddressOfEntryPoint = 0x1000


这个AddressOfEntryPoint就是程序指向的就是程序的入口点,也就是PE入口点加上这个AddressOfEntryPoint就是程序入口点,也就是00400000+1000=00401000
那么就是说,我们要改程序的入口点,就可以改AddressOfEntryPoint的值即可。好,我们记一下它的地址004000E8

我们回到反汇编窗口
我们再来看代码

00401000 >/$  6A 00         push 0x0                                 ; /pModule = NULL
00401002  |.  E8 0D020000   call <jmp.&KERNEL32.GetModuleHandleA>    ; \GetModuleHandleA
00401007  |.  A3 1C314000   mov dword ptr ds:[0x40311C],eax
0040100C  |.  83F8 00       cmp eax,0x0
0040100F  |.  74 13         je short Register.00401024
00401011  |.  6A 00         push 0x0                                 ; /Style = MB_OK|MB_APPLMODAL
00401013  |.  68 7D304000   push Register.0040307D                   ; |Title = "Register Me"
00401018  |.  68 34304000   push Register.00403034                   ; |Text = "Remove the nags to registerThis will make program fully registered :))"
0040101D  |.  6A 00         push 0x0                                 ; |hOwner = NULL
0040101F  |.  E8 C6010000   call <jmp.&USER32.MessageBoxA>           ; \MessageBoxA
00401024  |>  6A 0A         push 0xA
00401026  |.  FF35 20314000 push dword ptr ds:[0x403120]
0040102C  |.  6A 00         push 0x0
0040102E  |.  FF35 1C314000 push dword ptr ds:[0x40311C]
00401034  |.  E8 19000000   call Register.00401052


00401024地址之前都是我们不需要的,所以我们可以将入口地址改为00401024这个地址,也就是将AddressOfEntryPoint改为1024
那么我们就可以在左下角那里按ctrl+G,来到004000E8处

可以看到前面有00 10,它表示的就是1000(因为字节倒过来了,前面说过)
我们就可以选中00 10,然后空格,将它改为24 10即可
然后右键-复制到可执行文件-保存文件即可,打开看看,是不是程序开始没有那个弹框了呢
这样我们就成功了
第二个窗口我就不说了,太简单了,把call nop掉就好了

另外,本人纯小白,请大佬别喷{:301_973:}
谢各位{:301_978:}

最后,附上软件链接:https://www.lanzouj.com/i9o9txe

免费评分

参与人数 19吾爱币 +14 热心值 +17 收起 理由
pioneers + 1 + 1 用心讨论,共获提升!
cgj08 + 1 用心讨论,共获提升!
zl天涯行客 + 1 + 1 谢谢@Thanks!
kiriiri + 1 + 1 谢谢@Thanks!
暗夜杀神 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
述之天文 + 1 + 1 热心回复!
大街上要饭的 + 1 让电脑小白一愣一愣的
雨寒_cy + 1 + 1 用心讨论,共获提升!
lmjg520 + 1 + 1 我很赞同!
sdxlh07 + 1 + 1 谢谢@Thanks!
十一kui + 1 + 1 谢谢@Thanks!
帽子杨小三 + 1 + 1 热心回复!
慕容环环 + 1 + 1 谢谢@Thanks!
ww2mm + 1 用心讨论,共获提升!
随缘钓鱼 + 1 我很赞同!
Anekys + 1 + 1 用心讨论,共获提升!
Linzeo688 + 1 用心讨论,共获提升!
神代梦华 + 1 谢谢@Thanks!
wrnmdd + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
bester 发表于 2020-2-26 13:46
提两点:
1.获取模块句柄函数,可以看到在调用api以后返回值eax,然后eax赋值给了一个全局变量,如果说程序内部有调用这个全局变量,你这个程序必出bug
2.看你最后的效果就是修改了OEP,如果真的是小白的话,如果不了解PE结构,是不会明白你说的什么意思,也不知道这样做的原理,用stud_pe直接改OEP不舒服么?而且修改OEP只能针对这个程序而言,像别的语言你这么玩是没有效果的。

然后OD中的M 代表的是Memory 内存的意思

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
Hmily + 1 + 1 我很赞同!
羊之心羽 + 1 + 1 我很赞同!
没有细胞的人 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!

查看全部评分

推荐
flashman6820 发表于 2020-2-26 08:38
膜拜了,看了两遍,脑壳疼,做个记号。空了自己操作一遍,不知道自己能否融会贯通举一反三。
3#
wrnmdd 发表于 2020-2-26 08:27
4#
a2f88 发表于 2020-2-26 08:42
能达到小白也不容易了
5#
klbd 发表于 2020-2-26 08:46
慢慢进步,加油。
6#
lengqilaoshi 发表于 2020-2-26 09:10
这………………难道是小白水平……我不会
7#
vovo 发表于 2020-2-26 09:14
感谢分享,感觉还是没看懂,像我这样的菜鸟要找点资料入门了。
8#
吾爱古风 发表于 2020-2-26 09:14
羡慕嫉妒小白这个水平
9#
晚风以晚 发表于 2020-2-26 09:15
没看明白
10#
nullable 发表于 2020-2-26 09:17
楼主这个骗子!你哪里是个小白了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 09:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表