大白补丁快速上手教程(记一位菜鸟的成长历程)
本帖最后由 冥界3大法王 于 2020-3-8 15:42 编辑大白补丁快速上手教程(记一位菜鸟的成长历程)
https://wx3.sinaimg.cn/mw690/5f00d174ly1gcmk7v23p6j20h5cn1hdv.jpg
https://img2018.cnblogs.com/blog/990686/202003/990686-20200305091730402-385920036.png
故事从拖入文件后说起,难点在“异常中断补丁”菜单中,点【添加补丁】出现下面的窗口https://img2018.cnblogs.com/blog/990686/202003/990686-20200305091731052-487002805.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200305091731816-596232109.png我们先从圈8,反调试说起,这个工具确实强大到不行不行。你有两种添加定位到修改的VA地址的方法:1种是直接输入+内存基址1种是通过特征码(机器码的形式输入)之后伟大的Nisy校长,又写了EXE版本的特征码学习工具和Ollydbg/x32dbg/x64dbg特征码转换工具可谓是相当的便利!=====================================================================添加反调试检测,这个还是比较简单的。找一个地址使用就行了。这个程序中用不着使用,关于 添加反调试检测 我们就说到这里吧-------------------------------------------------------------------------------------------------------------https://img2018.cnblogs.com/blog/990686/202003/990686-20200305091732654-674397157.png接下来,我们找个地址进行第一个简单的任务:弹框训练 ,地址选择00408818好了https://img2018.cnblogs.com/blog/990686/202003/990686-20200305091733373-1052294505.png如果多行就要加\r\n(最多三行哟)点添加,点保存。https://img2018.cnblogs.com/blog/990686/202003/990686-20200305091734032-1524601475.png回到主界面中,选择 圈9号或 圈10号 都行。强烈建议选择圈9,创建劫持调试补丁(因为在调试过程中,不仅有log日志文件输出,程序还会转化成第二种模式,可谓相当的人性化设计)https://img2018.cnblogs.com/blog/990686/202003/990686-20200305091734785-214079491.png生成EXE并补丁后,再生成dll后,再运行主程序后,就会像上图这个样子。我们发现编辑框里啥也没有?是的,因为那个地方主要是放入注册码用的。-----------------------------------------------------------------------接下来,我们的任务是弹出00408824 |.6>PUSH MageBros.00457570 ;Software\SaitoGames\MageBros这个地方的注册表键值https://img2018.cnblogs.com/blog/990686/202003/990686-20200305091735491-1656020928.png我们先来猜一猜,这次会不会成功呢?测试后发现还是上图中的那个弹框,并没有成功,这是为什么呢?因为00408824 PUSH 00457570是一个压栈的语句当F8执行后值才能传入其中!所以正确的伏击地点应该是:00408829 00408829 |.E>CALL MageBros.0042AB00 ;对,就是这里!这里我们在堆栈窗口中才能真正意义的得到https://img2018.cnblogs.com/blog/990686/202003/990686-20200305091736259-1451201661.png光添加完了,别忘记,你还要再展示给观众才行的。这里只是添加,并没有得到哟~~https://img2018.cnblogs.com/blog/990686/202003/990686-20200305094408048-1773399098.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200305094408861-1547176193.png我们发现这次我们成功了。为啥要加【】呢?https://img2018.cnblogs.com/blog/990686/202003/990686-20200305094409547-1944386610.png大家可以参考下校长语录和温馨提示。呵呵,菜鸟最笨的方法就是多试了。不明白就用实践来检验真理。见多识广,吃得多了,用得多了,一样可以进步的关键得坚持,不能气馁。==================================================接下来,我们继续弹框练习。。。刚才我们弹出了一个Software\SaitoGames\MageBros如果它是带有连接符号的注册码呢?所以练习3:在这个后面加上★▲◆字样https://img2018.cnblogs.com/blog/990686/202003/990686-20200305094410289-1216198983.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200305094411013-2106211539.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200305094411651-646831488.png这样我们又学会了连接字符在内存注册机中的使用===================================================https://img2018.cnblogs.com/blog/990686/202003/990686-20200305094412510-1351334147.png我们添加 内存 添加寄存器数值https://img2018.cnblogs.com/blog/990686/202003/990686-20200305094413289-1073077134.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200305094413875-153059675.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200305094414358-747084532.png这次我们成功得到了EAX的数值https://img2018.cnblogs.com/blog/990686/202003/990686-20200305094414903-36364806.png还可以得到里边的其他数值,比如截图的这些哟 ~~https://img2018.cnblogs.com/blog/990686/202003/990686-20200305094415726-1580152767.png改变这两项就可以了哟~~ https://img2018.cnblogs.com/blog/990686/202003/990686-20200305131437268-1094463753.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200305131438045-1625705250.png多多弹框,多多测试,好处多多。========================================在【内存注册机】下拉菜单中,我们还有一项【使用存储数据】没有演示其功能https://img2018.cnblogs.com/blog/990686/202003/990686-20200305131438610-1359605724.png 接下来我们就来说 这个!这个东东要怎么用呢?https://img2018.cnblogs.com/blog/990686/202003/990686-20200305131439112-1865441288.png这又得从【存储当前数据】说起了。校长Nisy对于内存注册机的设计理念是:①存 ②读 ③展我们可以利用弹框做许多其他的事情,比如遍历控件,遍历注册表键值,搞个弹窗炸弹~~这种效果也是意外测试出来的,实际想想就跟你在用OD调试到某个循环的汇编命令一样的只不过,大白补丁扮演了夹三儿(注入和劫持)这样的强大功能。明白了原理,我们就可以继续测试和学习了。============================================================接下来,我们00458574这个存真码的地方设个硬件访问断点https://img2018.cnblogs.com/blog/990686/202003/990686-20200307101702182-2073988579.png然后我们就来到了另一个地方,这个地方在一个循环中!这个地方有一个特点,如果你用的是硬件访问断点,那么一次就断到了,并且第一次的数值就是我们要得到的真码!这次我们要练习的是条件断点+注册机+弹真码!我们说干就干,试验开始。https://img2018.cnblogs.com/blog/990686/202003/990686-20200307112128889-787225652.png经过试验,这样是不行的。因为该地址会被反复的读取到。所以还得来个条件。而且上面的次数并不适用。https://img2018.cnblogs.com/blog/990686/202003/990686-20200307112129669-1063201417.png所以用004062B2的时候,我们用eax 或edi 都是可以的,同时我们发现eax=458574 ,edi=458574也就是说B1:内存注册机>添加寄存器指向内存
1-1)可设上硬件断点,或选择智能都行,建议选择上硬件断点!
1-2)取edi寄存器指向的内存地址的数据(因为是寄存器窗口中看到的,所以不加中括号,即
1-3)条件断点为:edi=00458574 (edi即dword)B2:内存注册机>弹窗展示记录信息
2-1)可设上硬件断点,或选择智能都行,建议选择上硬件断点!
2-2)同1-3https://img2018.cnblogs.com/blog/990686/202003/990686-20200307112130465-299543902.png https://img2018.cnblogs.com/blog/990686/202003/990686-20200307112131332-2043609806.pngXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX这是一种条件设置方法,还有另外的那种我们也可以试一下。https://img2018.cnblogs.com/blog/990686/202003/990686-20200307113818051-904693408.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200307113818938-754554180.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200307113936509-243781108.png我们再一次得胜了。到这里我们已经学会了【内存注册机】下拉菜单中的1235、神奇的条件断点、添加反调试检测。https://img2018.cnblogs.com/blog/990686/202003/990686-20200307122125201-1579691096.png 接下来,我们学习修改寄存器标志位在大白补丁中是如何使用的:https://img2018.cnblogs.com/blog/990686/202003/990686-20200307122125991-240186002.png我们运行程序,来到注册的地方!https://img2018.cnblogs.com/blog/990686/202003/990686-20200307122126808-1930723228.png接下来,我们就对这个JE下手。https://img2018.cnblogs.com/blog/990686/202003/990686-20200307122127584-302694867.png为了让每次都能弹框,所以上面的1次,得改成【每次】截图失误了,抱歉!寄存器值我们取反就行(OD中z=1,你就输入0,反之也个道理)=================================================================================接着,我们再来说一下【存储当前数据】->保存寄存器/保存寄存器指向内存它分为两种情况:保存寄存器 就是说,你打算要寄存器里边的byte ? word ? dword? qword?(x64dbg中使用)它们对应 12 4 8 字节,跟咱们用bph xxxxxxxx, r, 2(x32dbg/x64dbg中的硬件断点一个道理,很容易理解了吧?这校长Nisy的黑科技还是相当给力的。https://img2018.cnblogs.com/blog/990686/202003/990686-20200307131122264-1444042742.png也就是说,可以得到这个里边的东东~~是不是弹出了Thank you很高兴呢?然而这个地方是不行的。为什么呢?
0042AE5C CALL MageBros.0042A9F0 ;显然这里的返回值,决定下面cmp和下面的je跳转(所以必F7一探究竟
0042AE61 MOV EAX,DWORD PTR DS:[0x46ABE>;这句是赋值
0042AE66 CMP DWORD PTR DS:,0>;这句是比较
0042AE6A JE SHORT MageBros.0042AE7F ;NOP
0042AE6C PUSH 0x40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0042AE6E PUSH MageBros.004575A4 ; |Mage Bros.
0042AE73 PUSH MageBros.004585A8 ; |Thank you改成PUSH 0x458574
0042AE78 PUSH ESI ; |hOwner
0042AE79 CALL DWORD PTR DS:[<&USER32.M>; \MessageBoxA
我们看上面的代码,就会发现,起决定的作用的在0042A9F0里,所以F7之后,我们看到了下面的代码!
0042A9F0/$6A FF PUSH -0x1
0042A9F2|.68 4A5F4500 PUSH MageBros.00455F4A
0042A9F7|.64:A1 00000000 MOV EAX,DWORD PTR FS:
0042A9FD|.50 PUSH EAX
0042A9FE|.83EC 1C SUB ESP,0x1C
0042AA01|.53 PUSH EBX
0042AA02|.A1 508F4600 MOV EAX,DWORD PTR DS:
0042AA07|.33C4 XOR EAX,ESP
0042AA09|.50 PUSH EAX
0042AA0A|.8D4424 24 LEA EAX,DWORD PTR SS:
0042AA0E|.64:A3 00000000 MOV DWORD PTR FS:,EAX
0042AA14|.C74424 08 00000000 MOV DWORD PTR SS:,0x0
0042AA1C|.A1 ECAB4600 MOV EAX,DWORD PTR DS:
0042AA21|.85C0 TEST EAX,EAX
0042AA23|.0F84 C3000000 JE MageBros.0042AAEC
0042AA29|.50 PUSH EAX
0042AA2A|.8D4C24 10 LEA ECX,DWORD PTR SS:
0042AA2E|.E8 5DB8FDFF CALL MageBros.00406290
0042AA33|.68 74854500 PUSH MageBros.00458574 ;MB-3186-2945
0042AA38|.8D4C24 20 LEA ECX,DWORD PTR SS:
0042AA3C|.C74424 30 00000000 MOV DWORD PTR SS:,0x0
0042AA44|.E8 47B8FDFF CALL MageBros.00406290
0042AA49|.8D4424 1C LEA EAX,DWORD PTR SS:
0042AA4D|.BB 01000000 MOV EBX,0x1
0042AA52|.50 PUSH EAX
0042AA53|.8D4C24 10 LEA ECX,DWORD PTR SS:
0042AA57|.C64424 30 01 MOV BYTE PTR SS:,0x1
0042AA5C|.895C24 0C MOV DWORD PTR SS:,EBX
0042AA60|.E8 FBBAFDFF CALL MageBros.00406560
0042AA65|.85C0 TEST EAX,EAX
0042AA67|.75 31 JNZ SHORT MageBros.0042AA9A
0042AA69|.68 68854500 PUSH MageBros.00458568 ;MB31862945
0042AA6E|.8D4C24 18 LEA ECX,DWORD PTR SS:
0042AA72|.E8 19B8FDFF CALL MageBros.00406290
0042AA77|.8D4C24 14 LEA ECX,DWORD PTR SS:
0042AA7B|.51 PUSH ECX
0042AA7C|.BB 03000000 MOV EBX,0x3
0042AA81|.8D4C24 10 LEA ECX,DWORD PTR SS:
0042AA85|.C74424 30 02000000 MOV DWORD PTR SS:,0x2
0042AA8D|.895C24 0C MOV DWORD PTR SS:,EBX
0042AA91|.E8 CABAFDFF CALL MageBros.00406560
0042AA96|.85C0 TEST EAX,EAX
0042AA98 74 05 JE SHORT MageBros.0042AA9F ;正确的地方是这里!NOP
0042AA9A|>B8 01000000 MOV EAX,0x1
0042AA9F|>F6C3 02 TEST BL,0x2
0042AAA2|.8B15 ECAB4600 MOV EDX,DWORD PTR DS:
0042AAA8|.8942 28 MOV DWORD PTR DS:,EAX
0042AAAB|.C74424 2C 01000000 MOV DWORD PTR SS:,0x1
0042AAB3|.74 10 JE SHORT MageBros.0042AAC5
0042AAB5|.83E3 FD AND EBX,0xFFFFFFFD
0042AAB8|.8D4C24 14 LEA ECX,DWORD PTR SS:
0042AABC|.895C24 08 MOV DWORD PTR SS:,EBX
0042AAC0|.E8 FBB9FDFF CALL MageBros.004064C0
0042AAC5|>F6C3 01 TEST BL,0x1
0042AAC8|.C74424 2C 00000000 MOV DWORD PTR SS:,0x0
0042AAD0 74 09 JE SHORT MageBros.0042AADB
0042AAD2|.8D4C24 1C LEA ECX,DWORD PTR SS:
0042AAD6|.E8 E5B9FDFF CALL MageBros.004064C0
0042AADB|>8D4C24 0C LEA ECX,DWORD PTR SS:
0042AADF|.C74424 2C FFFFFFFF MOV DWORD PTR SS:,-0x1
0042AAE7|.E8 D4B9FDFF CALL MageBros.004064C0
0042AAEC|>8B4C24 24 MOV ECX,DWORD PTR SS:
0042AAF0|.64:890D 00000000 MOV DWORD PTR FS:,ECX
0042AAF7|.59 POP ECX
0042AAF8|.5B POP EBX
0042AAF9|.83C4 28 ADD ESP,0x28
0042AAFC\.C3 RETN
我们这次用0042AA98再来尝试下上述操作。z依旧填0这次成功了吧? 未注册标志去除了吧?我们得到了第二次练手的机会了。https://img2018.cnblogs.com/blog/990686/202003/990686-20200307131123080-273360260.png==================================================================================接着我们再尝试下【修改EIP(NOP)】https://img2018.cnblogs.com/blog/990686/202003/990686-20200307142545840-1510504463.png依旧是这里!补丁过后,我们依旧变成了注册版。https://img2018.cnblogs.com/blog/990686/202003/990686-20200307142546577-1318108077.png我们再来看下帮助中是怎么说的?原来它的原理是这样的啊 ~~也就是说,那个地方并非只能填写一个NOP,还有个【偏移量数值这么一说】So,那我们【0042AA9A-0042AA98=2】行不行呢?https://img2018.cnblogs.com/blog/990686/202003/990686-20200307142547313-300981845.png保存过后,补丁 ~~~ 我们又胜利了 ~~果然可以啊 ~~~~ 兴奋吧 ~~~幸福吧 ~~~Nisy万岁 ~~~我们又学会了两招 ,不错吧 ~~不仅复习了OD中灵活多样的条件断点 ~~我们的条件断点生成器也快重新出炉了 ~~这得益于对校长Nisy ’s Baymax Patch Tools的深度拆解和汇编中一些概念的重新认识和补足 ~~工具会了,下条件断点会了,编程进一步扩展自己的断点生成器也有了新的想法了 ~~真是一举数得啊 ~~ ===================================================================================https://img2018.cnblogs.com/blog/990686/202003/990686-20200305131439842-2037701053.pnghttps://img2018.cnblogs.com/blog/990686/202003/990686-20200305131440611-2001223541.png ==========================================================后面还有一个存储,三个寄存器修改,一个HOOK还得再好好研究下,才能补足下面的知识点,那好,就先到这里吧 ~~ 几十张截图够喝一壶的了 ~~毕竟 学了 快两周时间了 ~~笔记做了一箩筐 ~~ 又是思维导图,又是列表,又是笔记 ,又是表格,又是电脑,又是本本,收益很多啊 ~~最后最后祝校长Nisy姐姐福寿年年 ~~开发出更牛X的工具来 ~~ 本帖最后由 冥界3大法王 于 2020-3-7 22:26 编辑
00408829400000
保存寄存器
save_00408829_byte_eax A1)存1个
save_00408829_word_eax A2)再存1个
save_00408829_dword_eax A3)再存1个
=============================
0040882E 400000 a4
内存注册机使用存储数据
byte
0040882E 400000
内存注册机使用存储数据 a5
word
0040882E 400000
内存注册机使用存储数据 a6
dword
byte word dword
9C FC9C 0019FC9C
==============================
A)先保存寄存器
B)内存注册机>使用存储数据/添加寄存器数值/添加寄存器指向内存
C)内存注册机>添加连接符
D)内存注册机>使用存储数据/添加寄存器数值/添加寄存器指向内存
E)内存注册机>添加连接符
F)内存注册机>使用存储数据/添加寄存器数值/添加寄存器指向内存
G)内存注册机>弹窗展示记录信息
后面博客没写完,凑合先看看吧。我都饿了。{:301_998:} 图好像裂开了 图片全挂 谢谢,从中受益多了 法王牛逼{:17_1062:} 学习了谢谢 Nisy什么时候成姐姐了 冥界3大法王 发表于 2020-3-7 11:52
后面博客没写完,凑合先看看吧。我都饿了。
我有一个加壳的程序,,明码的,,但是为啥不能显示呢,,,直接补丁是可以的,,但是用大白貌似不能正常显示出注册码,,不知道具体是哪里操作有问题。。我的思路是先指向那个寄存器,,然后保存寄存器的值,,之后弹出保存的值,,但是生成的注册机并没有弹出注册码,,但是看调试log 能够正确中断在显示注册码的位置,, kuqideyanlei 发表于 2020-3-7 18:48
我有一个加壳的程序,,明码的,,但是为啥不能显示呢,,,直接补丁是可以的,,但是用大白貌似不能正常 ...
@kuqideyanlei
很可能是那个数据的存储方式有问题
建议找试几种方案
我已经折腾几百次了,成功的方案存档就有几十个