CrackMe007 | 难度适当提高 |160个CrackMe深度解析(图文+视频+注册机源码)

作者:逆向驿站微信公众号:逆向驿站知乎:逆向驿站crackme007,是006的升级版,程序开发者给出的难度是3星,可能是迷惑有点多?个人觉得条线还是比较清晰,难度也不大,依然适合新手准备【环境和工具】win7/xp虚拟机环境CrackMe007(aLoNg3x.2.exe)ollydbgDededark【学习层次】逆向分析程序验证流程逻辑解密算法,写注册机积累Delphi程序逆向特点经验实战图文最终效果展示程序验证流程逻辑图动态分析1.程序观察crackme006的升级版,最终目标是一致的,均是要求给下方的蓝色logo无遮盖的显示出来,也就是说要给这个区域的控件全部隐藏,程序界面如下图同时可见开发crackme的和学习crackme的目标和标准是一致的,path的方式是不被认可的,即不可爆破,crackme若是个美貌女子,则应征服其心,切不可霸王硬上弓。2.控件ID,事件函数信息依然老规矩,既然是delphi的程序,我们就先用dededark给控件信息和事件函数信息搜集出来3.控件ID常量搜索法,打开入手点程序开始只有一个Register按钮,对应上图,其控件ID是2CC,那么我们依然就从2CC常量出发查找→所有常量→2CC(Register按钮控件ID),结果如下跟入第一个,根据之前的对dephi程序逆向的经验,应该可以一眼看出,这里的反汇编代码,功能是:dl的值0是隐藏,1是显示,如下图可以看出,若是程序如期执行到这里,则隐藏Register按钮,并显示Again按钮,那么我们在这个代码的函数块入口处下断点,来动态分析这个函数块的逻辑流程,如下图可以看到,这个函数实际就是点击Register按钮的事件函数,首先会对code进行验证,若是纯数字则跳到下方,否则弹框报错,并给[0x445830]赋值,看似多此一举,实则是必须过程,原因后面会提到,如果输入的是纯数字,则执行以下流程,如图在这里我们看到了算法函数,算法函数需要三个参数(用户名、code、[0x445830]的值),算法函数若是合规,则隐藏Register按钮,显示Again按钮。那么我们就F7跟入算法函数去研究算法4.分析算法在分析算法前,需要对[0x445830]这个全局变量值做一个说明初始值是0经过动态分析(请自行动手)得出,对它赋值的触发条件是,需要code输入至少6个英文字母,然后点击Regsiter按钮输入AAAAAA,它会被赋值固定值0x1686既然是这种输入输出都可控的全局变量值,我们就不去纠结其算法什么的了,当然如果你想去研究分析,那也是值得提倡得然而为什么非得多此一举得对他赋值呢?因为后面得核心算法中,它的值将作为一个乘数,若是0的话,那么算法的最终结果无论如何都会是0,0是无法完成算法合规的,简单的说,若是这个值是0,则不可能完成注册,所以要对他进行这种看似多此一举的隐藏赋值。是不是类似开启隐藏奶牛关,呵呵!后面得所有分析中我们都按照,code输入AAAAAA后[0x445830]被赋值0x1686为准我们来分析算法,如图可见核心算法是首先要求用户名要大于4个字符,为了防止溢出,我写的注册机就硬性规定为5个字符根据输入的用户名,经过两次嵌套循环,和[0x445830]的值,即我们控制其值为0x1686,共同计算出一个值,暂时记为nTempnTemp = nTemp % 0xA2C2A第二次输入的注册码要求是纯数字,纯数字作为10进制的数字型值,记为nCode则公式是nCode/0x59+nCode%0x50+1 = nTemp这种不是摘要hash的,是直接可以逆推计算出注册码,根据以上分析,写出逆推注册码的源码,如下//code输入AAAAAA给[0x445830]赋的值 int nKey = 0x1686; char szRes[1024] = {0}; char szName[32] = {0}; int nCode = 0; int nTemp = 0; GetDlgItemText(IDC_EDIT1,szName,31); if (strlen(szName)!=5) { MessageBox(“请输入5字符长度的字符串”,“逆向驿站提示您”); } else { //根据name字符串计算 for (int i =1;i<=5;i++) { for (int j =5;j>=1;j–) { nTemp = nTemp + (int)szName[i-1] * (int)szName[j-1] * nKey; } } } //取模 nTemp = nTemp%0xA2C2A ; //反推code nCode = (0x50 - ((nTemp -1)*0x59 % 0x50))+(nTemp-1) * 0x59 ; sprintf(szRes,“1.把注册机的五字符长度用户名输入nome处\r\n\r\n”); sprintf(szRes+strlen(szRes),“2.请在code处输入AAAAAA,然后点击Register按钮,弹框确认关闭即可\r\n\r\n”); sprintf(szRes+strlen(szRes),“3.请在code处输入%d,然后点击Register按钮\r\n\r\n”, nCode); sprintf(szRes+strlen(szRes),“4.Register按钮消失,again按钮出现\r\n\r\n”); sprintf(szRes+strlen(szRes),“5.请再次在code处输入AAAAAA,然后点击again按钮,弹框确认关闭即可\r\n\r\n”); sprintf(szRes+strlen(szRes),“6.请再次在code处输入%d,然后点击again按钮,按钮消失,注册成功\r\n\r\n”, nCode); SetDlgItemText(IDC_EDIT2,szRes);crackme注册机的完整源码均在网盘5.分析Again按钮事件函数我们现在已经成功的隐藏了Register按钮,但是又出来了一个Again按钮,有了如上的过程作为经验,我们"依葫芦画瓢",对Again按钮进行分析,结果发现,其实验证流程完全是重复了一遍Regsiter按钮,Again按钮点击事件逆向代码如下可以看到,给[0x445830]赋值的隐藏算法和最后的合规核心算法,均自动显示出来了中文标签,这就是习惯做标签的好处,之所以会显示出来,那证明跟上方的Regsiter部分的两个算法均调用的相同的算法函数,参数相同,算法相同,那么结果一定相同了。所以Again按钮消失的方法是跟Register一模一样的,只是他消失后,不再显示其他按钮而已,至此注册成功,Crackme007的标题也温顺的变成了Crackme by “your name"了。是不是有如开头所说的征服美女的快感?去网盘中下载,试试吧文章中涉及软件、课件、源码等均在网盘,为避免网盘链接失效,公众号中回复:网盘欢迎关注微信公众号:逆向驿站相关文章● CrackMe-006精解● CrackMe-005精解(下)● CrackMe-005精解(上)● CrackMe-004精解● CrackMe-003精解● CrackMe-002精解● CrackMe-001精解标签:逆向|破解|反汇编|olldbg|渗透测试|病毒分析|网络安全|区块链本期标签:dededark|delphi反汇编|crackme|crackme7|crackme07 ...

February 14, 2019 · 1 min · jiezi

CrackMe006 | 160个crackme精解系列(图文+视频+注册机源码)

作者:逆向驿站微信公众号:逆向驿站知乎:逆向驿站crackme006,依然是delphi的,而且没壳子,条线比较清晰,算法也不难,非常适合新入门的来练习.快过年了,Crackme系列年前就停更在006吧,祝大家新年666 ,年后继续准备【环境和工具】win7/xp虚拟机环境CrackMe006(aLoNg3x.1.exe)ollydbgDededark【学习层次】逆向分析程序验证流程逻辑解密算法,写注册机积累Delphi程序逆向特点经验实战图文最终效果展示程序验证流程逻辑图动态分析1.程序观察旁边既然有个help,我们当然要看了,四个弹框,有实际信息价值的是头两个,如图大体意思是,这个crackme的最终目标是隐藏ok和cancella按钮来观看完整的Ringzero logo。2.控件ID,事件函数信息依然老规矩,既然是delphi的程序,我们就先用dededark给控件信息和事件函数信息搜集出来3.控件ID常量搜索法,打开入手点程序开始是ok按钮是禁用状态,cancella按钮是可以点击的,那么我们就从cancella入手,两个方向,你可以去找cancellaclick事件的函数入手,也可以从cancella控件ID入手,我这里选择后者,因为最终目的是cancella要被隐藏起来,无论如何一定会用到控件ID查找→所有常量→2D0(cancella按钮控件ID),结果如下一共有四个地方用到了这个控件ID,我们分别跟入查看哪个是我们想找的隐藏这个控件的反汇编代码,从上至下依次如下找到了入手点,我们开始上下阅读函数块,发现这正是cancellaclick事件函数4.分析Cancellaclick中算法在Cancellaclick函数入口处下断点,然后用户名输入123456,注册码输入654321,然后开始动态调试分析,F8步过分析如下图F7跟如算法call仔细分析,如下图这种不是摘要hash的,是直接可以逆推计算出注册码,根据以上算法的反汇编分析,写出逆推注册码的源码,如下例如我们输入的用户名是123456,逆推注册码计算如下"123456"的第五个字符是"5",asc码是53,即十六进制0x35除以7余数是4,再加2是66的阶乘是6 5 4 3 2 *1,等于720 ,即十六进制的0x2D0123456每个字符的asc码相加是0x31+0x32+0x33+0x34+0x35+0x36,结果是0x1350x135 乘以0x2D0是0x365100x36510比注册码的十六进制形态大0x7A69即注册码是0x36510-0x7A69 = 0x2EAA7 ,即十进制是191143算出了注册码,我们来测试一下,如下动图Cancella按钮消失5.分析OK按钮中算法有了如上的过程作为经验,我们"依葫芦画瓢",来进行ok按钮中的算法分析,依然是okClick事件入口下断,F8动态分析,结果如下F7跟如算法call仔细分析,如下图分析后发现,这个算法是根据已经算出的注册码,再次要求用户名合规,算法并不难,而且很敏感的看到0x41,0x41对应的asc字符是大写字母A,而0x41加上的数字的取值范围是0-0x19,即十进制0-25,那一看就知道,就是26个大写字母范围内了,这时候你可以变态的暴力枚举也行,当然这个也是可以逆推出来,我们还是选择逆推吧。源码如下我们刚输入的注册码是191143,逆推出用户名应该是"BXDEUG",验证如下动图OK按钮消失,至此全部搞定, 是不是感觉不难,去网盘中下载,试试吧补充知识点再CancellaClick事件算法中,有个阶乘计算,函数内部反汇编代码如下,可以作为知识点积累,下次看到这个第一时间就能反应过来,提高效率,逆向的老手往往是这种知识碎片很多,而且脑部搜索算法很精准最后,喜欢这里的请推荐给你身边的朋友吧(渗透测试、逆向破解、病毒分析、信息安全等)文章中涉及软件、课件、源码等均在网盘,为避免网盘链接失效,公众号中回复:网盘欢迎关注微信公众号:逆向驿站相关文章● CrackMe-005精解(下)● CrackMe-005精解(上)● CrackMe-004精解● CrackMe-003精解● CrackMe-002精解● CrackMe-001精解本期标签:dededark|delphi反汇编|crackme|crackme6|crackme06

January 29, 2019 · 1 min · jiezi