没有细胞的人 发表于 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:,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:
0040102C|.6A 00         push 0x0
0040102E|.FF35 1C314000 push dword ptr ds:
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

bester 发表于 2020-2-26 13:46

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

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

flashman6820 发表于 2020-2-26 08:38

膜拜了,看了两遍,脑壳疼,做个记号。空了自己操作一遍,不知道自己能否融会贯通举一反三。

wrnmdd 发表于 2020-2-26 08:27

慢慢进步,加油。

a2f88 发表于 2020-2-26 08:42

能达到小白也不容易了

klbd 发表于 2020-2-26 08:46

慢慢进步,加油。

lengqilaoshi 发表于 2020-2-26 09:10

这………………难道是小白水平……我不会{:1_907:}

vovo 发表于 2020-2-26 09:14

感谢分享,感觉还是没看懂,像我这样的菜鸟要找点资料入门了。

吾爱古风 发表于 2020-2-26 09:14

羡慕嫉妒小白这个水平

晚风以晚 发表于 2020-2-26 09:15

没看明白

nullable 发表于 2020-2-26 09:17

楼主这个骗子!你哪里是个小白了{:1_911:}
页: [1] 2 3 4 5 6 7 8
查看完整版本: 连小白都算不上的逆向去除弹窗教程