逆向分析CrackMe系列——CrackMe001
逆向分析CrackMe系列——CrackMe001
之前学的逆向都忘干净了,最近又重新学一学,这次从CrackMe入手。
本系列的CrackMe资源均来自我爱破解网.
1. 运行程序,随便输入序列号后弹窗:
2. 进入到主窗口程序后,下断点:bp MeaasgeBoxA 或者 MessageBoxW 因为不知道调用的是哪一个函数(在主窗口下新窗口的断点是为了在进行错误提示的时候进行暂停)
3. 找到断下的位置:
4. 然后进行回溯ctrl +F9,发现并不是主窗口程序,继续回溯:
5. 继续回溯ctrl+F9 :
6. 找到疑似主程:
7. 进行分析和记录,该部分的入口为:0042F998
找到熟悉的字符串 “Try Again!” “ Sorry, the serial is incorrect! ” 字符串,进行前面的数据分析,发现新的字符串 “Congratz !!” “Good job dude =)” 疑似正确输入序列号后的字符串,同时发现其中的 jnz short 跳转是指向错误处理的部分,也就是说当序列号检验正确时将会继续往下,执行序列号正确的处理函数(弹窗);当序列号错误的时候会执行错误的处理函数弹窗(弹窗)。既然如此,我们直接对 jnz 的语句进行修改,直接改成 nop 即可,让程序直接执行序列号正确时的处理函数:
8. 但是执行后发现报错:
9. 分析,因为原来的汇编代码长度是4个字节,而nop只有2个字节,所以会出现出错误,所以此处需要用两个nop进行替换
10. 继续执行,成功:
11. 前一部分的任务结束,接下来进行整个程序的序列号生成函数查找,分析:既然在jnz 进行的跳转,说明在jnz前面已经进行了序列号的检查,那么我们继续往回看,jnz的前面地址0x0042FAFE 处正好有一个函数调用 call 004039FC,我们猜测它就是序列号检查的函数:
12. 由于该函数前面还有很多的函数调用,我们需要进行单步进行分析;在前面0x42F5E处又发现同样的序列号错误时的处理函数:
13. 分析,在这个函数处理前有一个 jge short的跳转,其中跳转的地址是这个函数处理结束的下一条指令,也就是说前面进行了某种判断,如果满足条件就继续往下进行,不满足条件就执行序列号错误时的处理函数。jge前面拿eax的值和4进行比较来判定是否跳转,cmp 前面正好有一个call 函数调用,而call 函数调用的返回值一般都是存放在eax中的,也就是说这个函数很可能是序列号的某种判断函数。
14. 我们进入该函数进行分析:
15. 发现该函数为一个简单的长度计算函数,那么此处的判断就是,先对输入的数据进行长度检查,大于4的往下进行,小于4的就执行错误的弹窗;但此时我们并不知道是对用户名还是序列号的检查。
16. 我们在此处进行下断,然后进行数据查看,call 00406930 前正好将eax进行了赋值,call 调用前需要参数传递,极可能是用eax进行的传递,对eax进行内存查找,发现正是输入的用户名:
17. 所以,此处的逻辑是先对用户名进行检查。我们再继续往下进行分析,按正常的逻辑来讲,用户名检查完后就应该是序列号检查了,因为用户名的检查jge short 跳转的地址是0042FA79, 那么我们从0042FA79一直分析到刚刚的序列号检查函数的地址0x0042FAFE 处。
18. 进行单步执行,同时进行堆栈的查看和分析,相关结果如下:
其中堆栈输入如下
19. 整个序列号计算部分的逻辑如下:
1) 取用户名的第一个字符进行乘法计算,计算的结果乘以2后存放于地 址 [431750] 中,此处为0x19F2 数值为“6642”
2) 然后进行字符串的拼接,完成序列号的生成,此部分是在序列号生成函数 call 004039AC 处完成。其中前面的四个push 均为它的参数传递,应该是一个简单的字符串拼接,生成的序列号存放在局部变量4中 (为 “CW-6642-CRACKED”)。
20. 其中的 call 00403708 函数不太清楚到底有什么实质性的功能,其中有一个功能就是对局部变量进行赋值,分别赋值字符串“CW”和“CRACKED”;另外函数 call 00406718 也不太清楚有什么作用,望哪位大佬解释一下。
21. 程序的另一个部分采用同样分析方式,采用了序列号同样的逻辑(口令为 “Hello Dude!” ),如下:
逆向分析CrackMe系列——CrackMe001相关推荐
- 逆向分析CrackMe系列——CrackMe004之注册码算法分析
逆向分析CrackMe系列--CrackMe004注册码算法分析 本文内容承接前面的工作,记录了自己每一步的分析过程和思路,由于内容较长,故单独写一篇. (本系列的CrackMe资源均来自我爱破解网) ...
- 逆向分析入门实战(二)
上次我们对主函数分析完成了,逆向入门分析实战(一)那么这次我们对子函数IsAlreadyRun进行分析. C语言代码 IsAlreadyRun函数的C语言代码如下图所示: 下面对其汇编代码进行分析: ...
- 2019年末逆向复习系列之Boss直聘Cookie加密字段__zp_stoken__逆向分析
郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是公众号<云爬虫技术研究笔记>的<2019 ...
- 2019年末逆向复习系列之今日头条WEB端_signature、as、cp参数逆向分析
郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是公众号<云爬虫技术研究笔记>的<2019 ...
- 2019年末逆向复习系列之努比亚Cookie生成逆向分析
郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是<2019年末逆向复习系列>的第二篇:< ...
- 2019年末逆向复习系列之淘宝M站Sign参数逆向分析
郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是<2019年末逆向复习系列>的第一篇:< ...
- 逆向分析——破解一个CrackMe
点赞后看,养成习惯 喜欢的话 可以点个关注哟 你们的点赞支持对博主们来说很重要哦 !!! 为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 00 前情提要 01 题目描述 02 破解步骤 00 前情 ...
- [安全攻防进阶篇] 六.逆向分析之OllyDbg逆向CrackMe01-02及加壳判断
前文作者讲解了OllyDbg和在线沙箱的逆向分析过程,分享了恶意软件如何通过宏脚本发送勒索信息或密码至用户邮箱.这篇文件将带领大家逆向分析两个CrackMe程序,包括逆向分析和源码还原,基础性文章,希 ...
- 第一课 逆向分析基础知识
看雪软件安全论坛 > 初学者园地 > 『伴你成长』 > 『资料导航』 加密与解密 解密分析入门基础知识 欢迎您,youcou 您上次访问的时间是: 2009-09-23,23:53 ...
- 【世界上最优秀的逆向分析工具】IDA Pro6.1绿色版
[世界上最优秀的逆向分析工具]IDA Pro6.1绿色版 让编程改变世界 Change the world by program 世界上最优秀的静态逆向工具没有之一 [caption id=" ...
最新文章
- 线段树维护区间最大值+第 45 届(ICPC)亚洲区域赛(昆明)L题Simone and Graph Coloring
- airtest web 录制滑块_Airtest之web自动化(一)
- 线程 sleep 取消_C/C++ 多线程机制
- java中String对象作为参数传递问题
- kali dvwa php mysql,kali linux 2.0下搭建DVWA渗透测试演练平台
- select下拉框option的样式修改
- STM32零碎问题记录
- 「Leetcode」206.反转链表:听说过两天反转链表又写不出来了?
- 把echarts导出成pdf
- java applet 教程_教你构建第一个Java Applet程序
- 运维工程师的主要工作职责
- 基金从业资格考试总结
- 如何计算变量或数据类型所占内存空间的大小
- 【ug903】Xilinx XDC约束的序(Order)
- Apache CXF框架简介
- 检索匹配的利器:正则表达式
- Python中metrics的用法
- 研究生考试复习有哪些基本的思路或准备?
- 单例/单体模式(Singleton)
- Vijos CoVH之柯南开锁 (二分图)