首页
社区
课程
招聘
[原创]CrackMe-29(简易)新手
发表于: 2019-9-16 14:40 4944

[原创]CrackMe-29(简易)新手

2019-9-16 14:40
4944
CrackMe-29
用到的工具 OD,PEID 


看到他是VC++6.0 运行一下看看效果

OD打开 给MessageBoxA 和MessageBoxW下个断点 看看是否可以断下窗口



是MessageBoxA断点断下的
栈回溯找到调用位置


这是弹窗正确和错误的位置了 

往上面找下,找到入口处 
 入口点 
下好断点让程序再次运行起来

NAME 和Serial 长度都必须要大于5 
程序算法位置

经过观察  Name异或处

是按照 Name的长度+1去异或, 因为我们输入的是1234567  现在全部变成了0了 只有相同的数进行异或才会变成0 所以 每次异或都是相同的
用户输入几位,他就从1开始 ++1 的形式去异或后面的字符 为了印证我们使用9位试试看123456789

Name上面的值全部变成了0 那就代表他们都异或了自己(相同的数); 也就证明 Name位置的异或是i=1;++i的形式去异或的

Serial的异或形式和Name 的一样,只不过 不一样的是值, Serial异或是从A 开始 然后下一位B 下一位C 这样去异或
 算法过去之后, 可以到了判断的位置

判断条件是 Name 和Serial 可以在异或完毕后,值是相同的才可以成功, 
这里 我放一个我一开始分析的数值, 这个程序可以写注册机, 逻辑也很好分辨, 但是我就不写了,时间有限




数值不是绝对的, 
爆破的话 直接修改跳转就可以了  jnz修改位jmp 正确弹出的弹窗位置  0x4015D9
注册机就写Name和Serial的逻辑判断去生成,可以用 
for(int i=0;i<=输入的值;i++)
{
   数组[i] ^i ; // 这样就ok了 伪代码, Serial一样的写法,换一个异或的值  从 i=0 i++; 变成 i=A , A++;  
}




[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
essageBoxA断点断下的
栈回溯找到调用位置
咋个回朔呢?能详细点吗?小白求科普,还有相关的文件有没?向大牛学习,
2019-9-18 05:42
0
雪    币: 546
活跃值: (657)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
OD 设置API断点  打开OD->加载目标程序->ctrl+g ->输入你要设置断点的API名称->输入成功将找到你要设置断点API的地址,->在当前的地址 F2(快捷键设置的是软件断点(底层实现将地址改为int 3实现异常并且断下)),或者右键->断点->硬件执行断点 ->断点设置完毕, F9 将程序运行起来 或者点击OD第二行的图标右三角型

最后于 2019-9-18 16:24 被System32编辑 ,原因:
2019-9-18 16:21
0
雪    币: 546
活跃值: (657)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
kxzpy essageBoxA断点断下的 栈回溯找到调用位置 咋个回朔呢?能详细点吗?小白求科普,还有相关的文件有没?向大牛学习,
栈回溯 是我们的断点在程序执行时,断下,我们查看堆栈,可以找到call 一个函数后, 要ret 返回出去的地址,这样 我们就可以顺着找到原始调用目标API的位置,  也就是是谁调用了我们的API
当API断下时->查看堆栈 堆栈应当会显示 Call到 (API名称) 来自 (程序名 . 一段地址) 告知 这个API的调用位置->将鼠标放置到那段堆栈上->按下回车, OD汇编代码区域会跳转到你按下回车的那段地址上;
最后于 2019-9-18 16:32 被System32编辑 ,原因:
2019-9-18 16:30
1
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
System32 kxzpy essageBoxA断点断下的 栈回溯找到调用位置 咋个回朔呢?能详细点吗?小白求科普,还有相关的文件有没?向大牛学习, 栈回溯& ...
虽然还是似懂非懂,还是谢谢大佬解答
2019-9-25 14:18
0
游客
登录 | 注册 方可回帖
返回
//