八哈春节版之让自动化穷举爆破为你扫除疑云
本帖最后由 冥界3大法王 于 2021-2-24 09:06 编辑让自动化穷举式爆破为你扫除疑云
作者:冥界三大法王
你是否遇到过以下这样的问题?
[*]条件分枝太多
[*]步经路线太长
[*]来到顶层,穷途末路
[*]某个地方看不清走势
[*]不知哪跳来的?
[*]事件出现点和成功转换点就在附近区间点上
[*]活人不太好弄清到底该修改哪里?
在 七哈逆袭:由一条吊带外露引发的悲剧 章节中,我们遇到几个困扰,就是上表中提到的这些。
这时我们就要思考了。如何拆解问题,降低难度呢?论坛老魔头经常说,自己脑补自己脑补自己脑补,如果都能想通,还问你做啥?
我们都希望在困难之时有人在旁指点一下啊{:301_972:}
最终总是滔滔不绝就像大姨奶一样唠叨,最后说啥没经验,没窍门,全是脑补来的。
求人难,求人难,求人难。
所以这就告诉我们说要自立更生,掌握方法和技巧,总结一套属于自己的打狗棒法。
方法是从哪来的?当然是自己花费时间总结和实践,通过查看论坛教程、精华文章,再深入实践再学习再总结再编程再发现问题和解决问题中不断完善中来的啦~~
静心思考过后,你会想到如下的问题:
[*]如何降低难度? 自动注释上,IDA地图,活人分析函数加上注释或标签,分析出函数的开始和结束部分
[*]修改点位于何区间? 当然是.text段了
[*]如何更有效的修改代码? 两头凑方针
[*]看着2进制代码能否直接想到汇编指令长啥样?(后两种刚刚掌握到一点门径,说得可能不对,就别贻笑大方了)
[*]根据场上情形猜测可能编程实现的思路是啥样?
https://static.52pojie.cn/static/image/hrline/2.gif
装载字符串的方式:
1. 直接量的:用时就push 地址,或mov xxxx dword ptr 这种就好处理!
2.先读用载: 这种就比较纠结了难掌握了,比如很多共享软件启动过程中某个call中循环调用LoadString(当然未必都是这个函数,这里只不过举例而已)
但是都会把注册成功,注册失败的信息统统的载入到内存中,某个地方条件成立时,转向调用注册状态!
。。。。。。。
然后现在想想应用到爆破软件时。。。。。
我看到了注册成功的信息,注册失败的位置也已经找到。。。
但是二者缺少必要的联系,和成立跳转的关键时机。。。
如何让条件成立,直接转向。。。
{:301_997:}
下文我们就用这个相对来说比较简单一点的程序: 第一个CrackMe,请指教! 这个来说事吧。
[*]任何一个能动态调试的程序,你都得保证第一步先能正确的断下来
在断的过程中,你得先想一想,为啥你能正确的断下来?
为啥有时断下来却费了牛羊劲?
正确和失败都是有其内因的!
断下来的是啥? 执行过程,函数过程,调用过程,基于事件机制
[*]关键条件成立时的跳转时机
程序不会自己主动的告诉你我的关键点在哪里。
也不会自己告诉你,我走过了哪些分支和路线。
看过刘青云 《大时代》的知道里边有借运、借势、借蛊一说。
对于我们爆破和逆向PJ来说,也是一样的道理。要学会各种“借力”。在借的同时要明确主攻方向在哪?这样才不会在代码的海洋中迷失。
如果我们有一张类似于仙剑里的宝物坐标的地图不就好了(或者是航海地图)
这时,我们就会想到IDA的符号导入库,通过插件,我们可以导入到x36dbg来识别某些区域内代码。
然后呢,现在看起来是不是好一些?
但是很多时候,我们来到的地方要先Ctrl+A分析一下,这样程序才会识别的更好一些
(跳转的标线更清晰一些)
我们现在是不是还缺点什么?
对,那就是加注释
但有时,我们还需要大量的自动化的注释。。。
这包括以下几个方面
功能性,模块化说明的注释,这个可以通过插件来自动的识别某一些
接下来,我们要站在菜鸟的眼光,思考目标这个易语言CrackME如何断下?
程序都途径了哪些路线(算法)
经过了关键的跳转。。。实现注册失败。。。。或注册成功?
https://static.52pojie.cn/static/image/hrline/2.gif
比如我们用Delphi编程时==》拖动一个按钮上去==》双击按钮==》自动化生成了事件过程。
当你点按钮时,就会发生相应事件。。。
有人说易语言按钮事件啊。。。
Ctrl+B==>FF 55 FC 或FF 55 FC 5F 5E
楼主要说的是给你两个大嘴巴子,外加两脚。
如果就像论坛中的贴子所说,我们编个工具,专门把 这个特征码做一些保护呢。。。
此时,你就狗屁断不到了。{:301_1008:}
然后呢,再想想,如果我知道事件的开始过程,或函数的开始过程的特征代码也是一样的道理。。。
所以呢,以此下断,也有可能断到。
当然你也可以内存中搜索下这个字符串,下个硬件断点或内存断点
或者利用窗口句柄。。wm_command。。。
或者E-debug等类似的工具。。。
或者跳转转移指令
又或者是 代码自行猜想与组合
或者呢,Alt+E,模块名下断点
又或者呢。
Ctrl+Shift+F
前边说了很多。。貌似是费话,然而却绝对有启发意义。
如果造按钮事件的这位高人死了呢?没有人发明这一招呢?所以说,深入的思考和反思,一切看似简单问题的深刻背后的原理才是我们发现PJ秘境的好方法。
此时,无论你用的什么方法,无论用的哪种手段,最终如能正常的断下且断在了事件开始的比较靠前的位置上,那么我要恭喜你,你第一步成功了。
接下来呢,当然第一次,我们都要习惯性的按Ctrl+F8 (如发现某个子call有问题,可以第2次时配合Ctrl+F7再深入迷宫深处发掘宝库机密)。。。
。。。经过了长途的爬山涉水。。。。漫漫长路。。。。最终我们抵达了。。。“出事目的现场”
这个程序怎么说呢,也简单,也复杂,程序按时间进行注册码的更换。。。
前边,我们说过了,我们多么希望:程序自动的、自觉的、告诉我,我途径了哪些路线,最好就像旅游时标上小黄灯,或小红旗,或导游图,告诉你地名(函数名,或此处的功能名)
然后我们可以设想下,当我们按-或ESC时,程序就会一点一点,一层一层,向上回退到最顶层处。。。
此时我们就可以利用下X32dbg/x64dbg(我们简称为x36dbg,冥界三大法王命名法)的自动跟踪功能
然后我们选择自动运行跟踪(配合Ctrl+F8 或 Ctrl+F7)
待其抵达 报错框(或目地结束点时)停止跟踪
复制全部信息到软件中处理一下
然后Alt+S到脚本窗口,粘入路径,来到最后一个ret处,按空格
1 2 3 这样的标序注释可以通过一些编程和筛选出更有效的一批来自动化的标上
然后2177处就全被自动的标上序号注释了。
然后,当你再度Ctrl+F8时,我们就能看到很多自己的地标景点了~~
如果呢,你再仔细的分析下这些汇编指令
如call
test
cmp
JCC
sete al 或 setne al 等等。。。。
复制全部
如果配合下EmEditor过滤呢。。。
那就只有不到1百个结果了,如果你再仔细的考虑下上下文,和出现弹框失败的事发地的关联性
那么最多也就几十个而已。。。
如果,我们再去写个程序呢?
我们只需要几轮粘贴,最终一手按F1另一只手喝茶就能快速简单的测试出可疑地址区间的那些地方如果被反汇编修改后的效果了。。。
由于此种爆破方法太过于暴力和强势,因此就不提供相应的工具了,这里只做参考和抛砖引玉。
具体这个程序可以反向修改sete al 或setne al
或JCC指令跳与NOP
或跟踪真码等10多种PJ方法来解决。
00401341 | 0F94C0 | sete al | ====>94=>95
0040135B | 0F84 6E000000 | je crackme1.4013CF | =====>NOP
00401452 | 0F84 6E000000 | je crackme1.4014C6 | ====>NOP
最后要说的是破解成功一钱不值,破解原理和方法可以深入地去思考。。。当然还有N多的知识点要去了解。
这样我们就通过自立更生,极限脑补的方式解决了对目标代码区间,危险代码的穷举式修改,快速找到合理的跳转点的位置了。
忆往昔我的旧时光都到哪里去了?!
{:301_974:}
[*]教你个DIY修改x36dbg的绝招,我刚刚想到的哟
[*]八哈春节版之让自动化穷举式爆破为你扫除疑云
[*]七哈逆袭:由一条吊带外露引发的悲剧
[*]六哈逆袭:论坛大屌做心脏移植手术
[*]五哈QT灰按钮的爆破要点总结
[*]四哈爆破之词典类程序爆破要点分享
[*]三哈爆破之旅要点分享
[*]二哈爆破要点分享:32位 and 64位
[*]大哈:简易爆破攻略
[*]x32dbg/x64dbg命令快速入门系列视频教学
[*]Baymax Patch Tools(大白补丁)使用从入门到精通
[*]盖世神器PowerPro使用教程
必须掌握的基本功:
[*]加密与解密第4版
[*]逆向工程核心原理
[*]使用OllyDbg从零开始Cracking
[*]揭秘数据解密的关键技术
[*]看雪论坛精华1-21
最后我们要特别感谢waweiggfnh同学对本节目的支持和赞助~~ @waweiggfnh {:301_997:} 沙发,那个只能是我的。{:301_971:} 每天一顶 看到…必须掌握的基本功,我独自神伤,我连三分之一都达不到
…看来混不下去了 仰望大佬
仰望大佬 太详细了 牛皮 谢谢分享!!!!!!!!!!!!!!!!!! 这插件厉害。楼主自己搞的吧。 谢谢楼主分享{:1_919:}
页:
[1]
2