chuiyan121 发表于 2022-2-13 17:35

The036. 吾爱培训,《03:改头换面之修改版权和资源》讲师:Kido 进阶修改[消息弹窗]

本帖最后由 chuiyan121 于 2022-2-13 21:00 编辑


The036. 吾爱培训,《03:改头换面之修改版权和资源》讲师:Kido 进阶修改[消息弹窗]
关于吾爱破解论坛官方入门教学培训第一期,我的学习记录,如有疑问欢迎交流指正。^_^
这节课是实战添加一个MessageBox弹窗,包含了添加API函数,OD自定义参数等,属于进阶内容。

1、还是用上一集The035修改后的程序1.exe作为例子,使用工具Stud_PE载入1.exe,在函数选项卡里找User32.dll,展开查找API函数MessageBoxA,会发现只有MessageBoxWord:511 rva: 0004D36C,其实这个是Unicode类型的弹窗,也可以使用,为了学习,还是自己添加一个MessageBoxA的函数吧。
https://s4.ax1x.com/2022/02/13/HDqHW4.png

2、添加API函数的方法为:右键->Add New Import,添加新的输入函数。
https://s4.ax1x.com/2022/02/13/HDqTFU.png

3、Dll选择,到系统盘(C盘)目录下的system32文件夹下,选择user32.dll文件打开。
https://s4.ax1x.com/2022/02/13/HDqIoT.png

4、Dll选择好了,接下来选择函数,在弹出的列表中选择MessageBoxA,按下添加到列表按钮,按添加按钮。
https://s4.ax1x.com/2022/02/13/HDq7YF.png

5、在函数列表底部,会出现刚刚添加的函数,函数信息为:MessageBoxAord:0 rva: 00084123。那么可以得出相对地址为:00084123(rva) + 00400000(基址) = 00484123(va)。
https://s4.ax1x.com/2022/02/13/HDqqSJ.png

6、函数添加了,需要在区段中增加一块空的区域,存放调用弹窗的数据。大牛说在程序代码里找一块空的区域也行,不过新手还是重新开辟一个区段,防止修改失误程序崩溃。接下来在区段选项卡右键->New Section,创建新的节。
https://s4.ax1x.com/2022/02/13/HDqvex.png

7、区段名自定义,原始大小和虚拟大小都改成1000,懒办法,其实不需要这么多空间。选择用空字节填充区段,增加。
https://s4.ax1x.com/2022/02/13/HDqxw6.png

8、OD载入1.exe,Alt+M打开内存窗口,双击新添加的区段到达数据窗口,记录地址00485000。
https://s4.ax1x.com/2022/02/13/HDqOyR.png

9、Alt+C到达CUP窗口,Ctrl+G转到00485000处,看到全是空数据。双击第一行,输入push 0,回车4下,4个空参数就添加好了,然后输入call 回车,添加调用MessageboxA函数。此时弹窗的框架就添加好了。
https://s4.ax1x.com/2022/02/13/HDqXO1.png

10、接下来添加弹窗的具体的参数如下:
push Style(0)
push Title
push Text
push hOwner(0)
Call
通过上面的弹窗参数模板,第一个参数为Style(弹窗类型),设置为0;
https://s4.ax1x.com/2022/02/13/HDqLl9.png
第二个参数为Title(弹窗标题),设置为52PojieWoLaiLa。这里的内容不能直接输入,需要将内容存放在一个空的内存地址中,然后调用此地址。这里选择0048501A这个地址存放标题内容,方法为:在数据窗口Ctrl+G转到0048501A地址。
https://s4.ax1x.com/2022/02/13/HDqzTK.png
在数据窗口选择数据长度,Ctrl+E打开编辑窗口,由于调用的是MessageBoxA函数,因此使用ASCII类型输入内容,确定后添加完毕。
https://s4.ax1x.com/2022/02/13/HDL9YD.png
第三个参数为Text(弹窗正文内容),采用第二个参数同样的方法,添加对应内容为:I’m Chuiyan。
https://s4.ax1x.com/2022/02/13/HDLpFO.png
内容都添加完毕了,下面来调用这些内容。双击00485002处输入push 0048501A,然后下一个参数输入push 0048502A,这样参数就调用成功了。
https://s4.ax1x.com/2022/02/13/HDLCfe.png
第四个参数hOwner(窗口句柄),设置为0。第五个参数调用Message box函数,设置为:Call 。
https://s4.ax1x.com/2022/02/13/HDLiSH.png
所有参数改完后,根据程序运行的流程,弹窗完成后需要继续运行原程序,因此要在call后面需要jmp到原程序入口点0003A1B4(入口地址)+ 00400000(基址)= 0043A1B4(相对虚拟入口地址)。
https://s4.ax1x.com/2022/02/13/HDLFld.png

11、以上弹窗内容全部设置完成,选择修改过的所有地方,保存文件为2.exe。发现程序可以运行,但并没有弹窗。
https://s4.ax1x.com/2022/02/13/HDLAOI.png

12、原因是程序的入口点还是原来的,并没有调用我们增加的弹窗。下面继续修改程序入口点为我们新增的内容,地址为:00485000(新入口地址)- 00400000(基址)= 00085000,或者用Rva<=>Raw工具如下图计算相对虚拟地址。将计算的结果00085000填到入口点(rav)处,按下保存到文件按钮,保存完毕。
https://s4.ax1x.com/2022/02/13/HDLZ0P.png

13、运行2.exe,发现成功弹出消息窗口,确定后弹出原程序,添加弹窗功能完成。^_^
https://s4.ax1x.com/2022/02/13/HDLVmt.png

经过一顿折腾,发现一个小窍门,用PEID或者Stud_PE软件分析出来的地址,在OD里push、call、jmp时都需要加上基址,否则程序会调用不到内存崩溃,如果地址正确,OD里的注释处一般会出现对应的注释内容。
https://s4.ax1x.com/2022/02/13/HDLk6A.png




wapj152321 发表于 2022-2-13 17:50

收益匪浅

chuiyan121 发表于 2022-2-13 18:28

wapj152321 发表于 2022-2-13 17:50
收益匪浅

感谢支持,一起学习!

yyb1813 发表于 2022-2-13 21:32

shihuyuan 发表于 2022-2-13 23:55

属实涨姿势了
页: [1]
查看完整版本: The036. 吾爱培训,《03:改头换面之修改版权和资源》讲师:Kido 进阶修改[消息弹窗]