视频+图文+注册+机源码 | 160个CrackMe深度解析合集 | 逆向破解入门

版权声明:文章均来自于微信公众号:逆向驿站 转载需注明链接 https://blog.csdn.net/hehedf007/article/details/86358869

全部合集的获取请关注微信公众号:逆向驿站

回复:160

即可获得其余合集

以下是示例文章


160个CrackMe深度解析合集-001

提倡“刨根问底“,拒绝”浅尝辄止“,160个CrackMe,有价值的逐行阅读反汇编代码,分析算法,写注册机,不知不觉变大神,只爆破永远是菜鸡。本期第一个很简单,学习完可以额外解决和理解od中“在可执行文件中无法定位数据”的问题。

详解视频

width="650" height="420" src="https://v.qq.com/txp/iframe/player.html?vid=q0827dvjtxk" allowfullscreen="true">

准备

【环境和工具】

  • win7/xp虚拟机环境
  • 目标程序:CrackMe01(Acid burn.exe)
  • ollydbg
  • LordPe
  • 增加区段工具.exe

【学习层次】

  • 可以爆破
  • 可以找到正确注册码
  • 掌握阅读反汇编代码来分析算法,搞注册机

【网盘链接】
注意:为避免链接失效,请在《逆向驿站》公众号中回复:网盘,获取最新课件源码等网盘链接
在这里插入图片描述

图文记录

一.观察程序逻辑
程序开始一个弹框,有两个输入注册码的地方,一个是只要注册码,一个需要用户名和注册码
弹框1
在这里插入图片描述
弹框2
在这里插入图片描述
弹框3
在这里插入图片描述
二.od中加载程序根据弹框内容定位关键跳,分析代码
弹窗1
这里的call,nop掉或je改jmp就不弹了,过于简单略过
在这里插入图片描述
弹窗2
定位关键跳后浏览反汇编,注释+标签后截图如下,可看到整个流程仅仅是两个字符串"Hello" “Dude!” 和一个空格拼接起来后是"Hello Dude!",然后和自己输入的"654321"作比较,没有什么算法值得研究,找到了注册码就行了
在这里插入图片描述
弹框3
有用户名有注册码,可以研究一下算法
1.输入伪码
输入用户名“123456”,注册码“654321”
在这里插入图片描述
2.下断点,逐行步过分析反汇编代码
根据弹框字符串定位到关键跳附近代码,向上浏览找到整块代码入口点
【0042F9A9 |. 55 push ebp】下断点,开始阅读,发现全局变量地址[0x431750]比较敏感,并赋值0x29
在这里插入图片描述
3.发现算法
继续F8走过上面一堆的关于用户名合规的判断后,再次出现全局变量[0x431750]地址,仔细阅读发现是算法,算法为:取出用户名字符串在内存中的第一个字节,乘以全局变量[0x431750],即0x29,再乘以2,并存入[0x431750].
此时是十六进制数字型,随后再下方的一个call中会先转换为十进制数字并转为字符串。
在这里插入图片描述
4.验证流程分析
如下图注释内容和标签,需要注意的是call 406718这个函数就是上面提到的先转换十进制再变字符串的函数,很多人凭经验会第一次把他当为算法函数其实不然。
在这里插入图片描述
5.注册机
知道了算法,那么我们开始写注册机,代码如下,我用的mfc写的

void CCM002Dlg::OnOK() 
{
	// TODO: Add extra validation here
	
	//CDialog::OnOK();

   char szName[100]={0};
   int nKey = 0;
   char szkey [100] = {0};

   GetDlgItemText(IDC_EDIT1,szName,100);

   if (strlen(szName)>0)
   {
	      nKey = (int)szName[0];
		  sprintf(szkey,"CW-%d-CRACKED",nKey*0x29*0x2);
          SetDlgItemText(IDC_EDIT2,szkey);
   } 
   else
   {
	   const char * szTitle="逆向驿站提示您";
	   const char * szText="用户名不能为空!";
	   MessageBoxA(szText,szTitle);
   }
   
}

效果如下
在这里插入图片描述

番外

研究解决OD中“在可执行文件中无法定位数据”
1.写messagebox内联补丁时候遇到“在可执行文件中无法定位数据”
分析后发现程序注册码验证过程中当运行完0042FAE5(反汇编代码为call 004039AC)后,参数三即epb寻址中的堆栈地址[epb-0xc]就会传入根据用户名计算出的正确验证码,那么我们就直接jmp到我们自己的代码利用一个messagebox函数来弹出来这个验证码,也就相当于一个另类的注册机了,写完了作者准备保存的时候发现
在这里插入图片描述
2.原因和解决
视频中有详细讲解,新手可以看视频,图文写的比较见简练

  • 原因是:增加代码后,整个代码长度超出了Code区段的大小
  • 解决是:增加一个新区段,来写内联补丁
  • 要给程序增加一个自己的区段,而且可读可写可执行,利用网盘中的“增加区 段工具.exe”或"lordpe均可以"
    如图,修改代码跳转至内联补丁
    在这里插入图片描述
    内联补丁代码
    在这里插入图片描述
    效果如下动图
    在这里插入图片描述
    在这里插入图片描述

全部合集的获取请关注公众号:逆向驿站

回复:160,即可获得其余合集

在这里插入图片描述 在这里插入图片描述


博客地址:https://blog.csdn.net/hehedf007

相关文章
展开阅读全文

没有更多推荐了,返回首页