Nisy 发表于 2020-3-3 23:42:59

Baymax 在明码比较软件中的提示框中显示注册码

大白群里讨论下一款明码比较软件的另类改法,其实就是先存储,后使用的一个设置方案。


OD 载入分析,模块基地址 00400000

真码位置:

0042AA33 | 68 74854500            | push magebros.458574                            | 458574:"MB-3186-2945"   // 00458574 指向的字符串为真码
0042AA38 | 8D4C24 20                | lea ecx,dword ptr ss:                   | ecx:EntryPoint




注册后的提示框:

0042AE5C | E8 8FFBFFFF            | call magebros.42A9F0                            |
0042AE61 | A1 ECAB4600            | mov eax,dword ptr ds:                   |
0042AE66 | 8378 28 00               | cmp dword ptr ds:,0                     | :EntryPoint
0042AE6A | 74 13                  | je magebros.42AE7F                              | 若注册成功弹框提示
0042AE6C | 6A 40                  | push 40                                       |
0042AE6E | 68 A4754500            | push magebros.4575A4                            | 4575A4:"Mage Bros."
0042AE73 | 68 A8854500            | push magebros.4585A8                            | 4585A8:"Thank you! You have successfully registered Mage Bros."
0042AE78 | 56                     | push esi                                        | esi:EntryPoint
0042AE79 | FF15 58724500            | call dword ptr ds:[<&MessageBoxA>]            |
0042AE7F | 5E                     | pop esi                                       | esi:EntryPoint
0042AE80 | C3                     | ret                                             |





第一步、保存真码字符串地址



执行到 0042AA38 时,注册码字符串地址 00458574 压入堆栈,我们这时可从堆栈中获取并保存该字符串(key)地址,存储内存地址为 ESP+0,类型为 DWORD,捕获一次即可。

注意:界面设置的是欲存储数据的内存地址,此处输入的是 ESP 栈顶地址,即内存数据 00458574 的数据地址。

ESP栈地址(内存地址)               栈空间内存数据
+0    0019FC14----------------------------00458574
+4    0019FC18----------------------------83B145EE

此处不要设置为,存储的数据就是 0x332D424D 了。
004585744D 42 2D 33 31 38 36 2D 32 39 34 35 00 00 00 00MB-3186-2945....

即:
设置 ESP+0存储的就是
设置 存储的就是 []

如果做内存注册机,此处存储ASCII字符串,设置存储地址就是了。

baymax 中设置如下:


第二步、NOP跳转,点注册即弹框。

注:NOP 不是去修改指令为 90 90,而是修改EIP=EIP+该指令长度。


第三步、使用存储数据替换弹框内容

执行到 0042AE73 时,堆栈压入了 MessageBox 的标题参数,此时用我们保存的 DWORD 取替换掉栈顶 ESP 指向的栈内存数据。



注意:使用存储的数据要与存储数据的格式一致。这里替换的数据地址为 ESP+0(即欲修改内存数据的地址)。



同理在 0042AE78 地址换掉 MessageBox 的另一个参数即可。


天天微笑 发表于 2020-3-4 01:39:00

沙发{:loveliness:}

ningzhonghui 发表于 2020-3-4 14:45:42

很经典,以后会碰到像这样的补丁方法

哥又回来了 发表于 2020-3-4 17:20:53

这样的补丁方式追溯到winzip 7.0,那时见到的 第一印象是“兴奋“

Arsage 发表于 2020-3-4 17:43:38

谢谢表哥分享。希望能发多点类似的教程出来,继续学习。

xjh88232259 发表于 2020-3-5 10:18:00

谢谢楼主分享,辛苦了!!!!!路过支持一下!!!!!

动物凶猛 发表于 2020-3-5 22:11:22

学习一下,谢谢校长,记下来了

雲裏霧裏 发表于 2020-3-5 22:27:39

謝謝校長提供的經驗,好好學習

smallhorse 发表于 2020-3-6 09:15:48

对于本强迫症患者来说,还是希望大白能直接修改/获取这些变量数值.......
页: [1]
查看完整版本: Baymax 在明码比较软件中的提示框中显示注册码