Crack Me逆向练习
来源:互联网 发布:起飞了是什么网络意思 编辑:程序博客网 时间:2024/05/22 10:34
Crack Me
一份关于逆向学习的实习报告,主要是关于《逆向工程核心原理》第六章第一节中的abexcm1-voiees.exex程序逆向练习。修改后缀为.exe,双击运行如下图:
OllyDbg打开,一路F8到如下截图的地方:
00401000 >/$ 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL00401002 |. 68 00204000 PUSH abexcm1-.00402000 ; |Title = "abex' 1st crackme"00401007 |. 68 12204000 PUSH abexcm1-.00402012 ; |Text = "Make me think your HD is a CD-Rom."0040100C |. 6A 00 PUSH 0 ; |hOwner = NULL0040100E |. E8 4E000000 CALL ; \MessageBoxA00401013 |. 68 94204000 PUSH abexcm1-.00402094 ; /RootPathName = "c:\"00401018 |. E8 38000000 CALL ; \GetDriveTypeA0040101D |. 46 INC ESI0040101E |. 48 DEC EAX0040101F |. EB 00 JMP SHORT abexcm1-.0040102100401021 |> 46 INC ESI00401022 |. 46 INC ESI00401023 |. 48 DEC EAX00401024 |. 3BC6 CMP EAX,ESI00401026 |. 74 15 JE SHORT abexcm1-.0040103D00401028 |. 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL0040102A |. 68 35204000 PUSH abexcm1-.00402035 ; |Title = "Error"0040102F |. 68 3B204000 PUSH abexcm1-.0040203B ; |Text = "Nah... This is not a CD-ROM Drive!"
程序在调用了一次MessageBoxA函数后,又调用了一次GetDriveTypeA,而传入的参数是"c:\",显然是不会有“think your HD is a CD-Rom.”结果的。通过下拉看到JE SHORT abexcm1-.0040103D处也是调用了一个弹框显示消息文字是"Ok, I really think that your HD is a CD-ROM! :p",如果任务只是让其运行到弹框提示文字"Ok, I really think that your HD is a CD-ROM! :p"的地方,只需要将GetDriveTypeA传入参数改为光驱所在盘符即可,不过我电脑没有光驱(-__-)b。看来只有修改GetDriveTypeA的运行结果了。
通过查询资料(PHP程序员哇,只能查资料了)发现GetDriveType的运行结果:
返回值指定驱动器的类型,它可以是以下值之一:DRIVE_UNKNOWN:未知磁盘类型;DRIVE_NO_ROOT_DIR:根路径无效;DRIVE_REMOVABLE:可移动磁盘;DRIVE_FIXED:固定磁盘;DRIVE_REMOTE:远程驱动器;DRIVE_CDROM:光驱;DRIVE_RAMDISK:虚拟内存盘。易语言中,上述常量的10进制数值为:#DRIVE_UNKNOWN=0;#DRIVE_NO_ROOT_DIR=1;#DRIVE_REMOVABLE=2;#DRIVE_FIXED=3;#DRIVE_REMOTE=4;#DRIVE_CDROM=5;#DRIVE_RAMDISK=6。
运行完GetDriveTypeA,发现此时eax果然是3,如上为,固定磁盘,如下截图:
直接修改eax为5,一路F8,如下截图:
那么运行完GetDriveTypeA之后都干了个啥呢?怎么弄个每次双击二次弹框提示"Ok, I really think that your HD is a CD-ROM! :p"的破解程序呢?
INC ESI ;INC只有一个操作数,它将指定的操作数内容加1,再讲结果送回到该操作数。DEC EAX ;DEC是汇编语言中的算术运算指令,起到减1的功能。JMP SHORT abexcm1-.00401021 ;无条件跳转: JMP;实际就是下一条指令INC ESI ;加1INC ESI ;加1DEC EAX ;减1CMP EAX,ESI ;比较eax esiJE SHORT abexcm1-.0040103D ;(ZF)=1,则控制转移以上,分析esi 三次加1等于3,eax由3两次减一为1,通过cmp指令ZF为0,此时不会跳转到abexcm1-.0040103D,此处破解可以修改JE为JMP,Ctrl+F2 一路F8修改“JE SHORT abexcm1-.0040103D”为“JMP SHORT abexcm1-.0040103D”,Copy to executable,保存为abexcm1-voiees-JMP.exe,双击运行成功。发散思路,直接修改调用GetDriveTypeA指令为mov eax 5(5为DRIVE_CDROM,即光驱的正常返回值)同样操作保存为abexcm1-voiees-MOV.exe,双击运行成功。前边不是分析cmp 比较的是eax(1)和esi(3)吗,能不能修改esi为直接数1呢?试一试,如下截图:
cmp后边的语句也错掉了,把esi改为3这条路走不通了,偶然记起来之前有看到某条命令不想让其执行改为Nop,把esi两次加1改掉,让其等于1,操作,如下截图,依前法保存为abexcm1-voiees-NOP.exe,双击运行成功
参考:
1 易语言如何用API枚举磁盘
2 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
3 汇编cmp比较指令详解
- Crack Me逆向练习
- 逆向研究Crack Me No.1
- crack 练习
- 第一次 CRACK ME,试手试手~
- 160crack me 暖心水题整理
- writeup-Crack Me If You Can
- 第一次尝试Crack(逆向异或算法)
- reverse kr easy crack 逆向 write up
- 170918 逆向-jeb2动态调试(ciscn-crack.apk)
- crack
- Crack
- Crack
- [学习笔记]逆向练习1
- 实验吧 逆向 小练习
- Android逆向反调试练习
- android逆向分析之smali练习
- 结构体数据的逆向练习
- 逆向还原C语言代码 练习1
- 安卓驱动、HAL、JNI与java
- UITableView 高级
- Integer Division
- Scrapy入门教程
- ios 从系统相册选择多张图片
- Crack Me逆向练习
- 我心中的IT工程师
- Qt5如何使用摄像头
- NSNumber基本用法
- MySql创建新用户并远程访问[mysql初级文档]
- c++ 11 多线线程系列-------- 一个最简单而且实用的线程池
- 关于Handler的removeCallbacks方法无效
- lua--lua中的迭代器
- Linux Advance--打印标准IO流缓冲状态信息