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 的另一个参数即可。
沙发{:loveliness:} 很经典,以后会碰到像这样的补丁方法 这样的补丁方式追溯到winzip 7.0,那时见到的 第一印象是“兴奋“ 谢谢表哥分享。希望能发多点类似的教程出来,继续学习。 谢谢楼主分享,辛苦了!!!!!路过支持一下!!!!! 学习一下,谢谢校长,记下来了 謝謝校長提供的經驗,好好學習 对于本强迫症患者来说,还是希望大白能直接修改/获取这些变量数值.......
页:
[1]