吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|wvlr.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 3452|回复: 85

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

  [复制链接]
没有细胞的人 发表于 2020-2-26 08:14
本帖最后由 没有细胞的人 于 2020-2-26 10:30 编辑

首先这个方法非常简单,求大神嘴下留情!
话不多说,开整!
首先看一下这个软件“RegisterMe.Oops.exe”
打开后会有一个弹窗,提示我们,让我们移除这个窗口
1.png
接下来,则出现了这个程序主界面
2.png
关掉后,又会出现一个弹窗
3.png
然后,就没有然后了,,
我们今天重点来讲去除第一个弹框
4.png
既然明白了,那就开始吧!
先查下壳

嗯,没壳(注意!“MASM32 / TASM32”是一个编译器,他不是壳)
好,直接拖进OD
5.png
嗯,可以看到这个程序其实非常简单,短短二十几行代码,要破解也是非常容易的!
但是,我们还是要分析一下,
我们来看第一个弹窗
就是这个东东


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代表啥,有知道的大佬阔不阔以告诉我,嘿嘿)
8.png
然后在这里找到PE的文件头部,就是这个00400000,然后双击进来
6.png
7.png
箭头指的那个,标志着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头部
10.png
可以看到有一个这个东东

004000E8    00100000    DD 00001000          ;  AddressOfEntryPoint = 0x1000


这个AddressOfEntryPoint就是程序指向的就是程序的入口点,也就是PE入口点加上这个AddressOfEntryPoint就是程序入口点,也就是00400000+1000=00401000
7256.com_【官方首页】-威尼斯娱乐城那么就是说,我们要改程序的入口点,就可以改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处
11.png
可以看到前面有00 10,它表示的就是1000(因为字节倒过来了,前面说过)
我们就可以选中00 10,然后空格,将它改为24 10即可
然后右键-复制到可执行文件-保存文件即可,打开看看,是不是程序开始没有那个弹框了呢
这样我们就成功了
第二个窗口我就不说了,太简单了,把call nop掉就好了

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

最后,附上软件链接:http://www.lanzous.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 内存的意思

免费评分

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

查看全部评分

flashman6820 发表于 2020-2-26 08:38
膜拜了,看了两遍,脑壳疼,做个记号。空了自己操作一遍,不知道自己能否融会贯通举一反三。
wrnmdd 发表于 2020-2-26 08:27
a2f88 发表于 2020-2-26 08:42
能达到小白也不容易了
DEF 发表于 2020-2-26 08:43
都还好主要我不知道什么是句柄
klbd 发表于 2020-2-26 08:46
慢慢进步,加油。
honglang 发表于 2020-2-26 08:47
这还是小白啊亲爱的
pbs1019 发表于 2020-2-26 09:03
我连小白鼠都不如
lengqilaoshi 发表于 2020-2-26 09:10
这………………难道是小白水平……我不会
vovo 发表于 2020-2-26 09:14
感谢分享,感觉还是没看懂,像我这样的菜鸟要找点资料入门了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2020-3-29 00:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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

页面底部区域 foot.htm