CrackMe-001 Acid burn.exe
本帖最后由 比海更深 于 2020-2-2 14:05 编辑运行程序,有弹框
软件界面
serial/Name有用户名密码登录
Senial有注册码登录
目标:
1.去掉弹框
2.逆向得出账号密码
3.逆向得出正确注册码
1.去掉弹框程序加载OD,搜索字符串找到弹框信息Welcome to this Newbies 所在位置,查看调用
在42F797下断,重新运行,确认是该函数调用弹框,程序返回到425643
直接把调用弹框的42563D函数Nop即可去掉弹框
2.逆向账号密码随意输入账号密码,失败后弹框“Sorry,The serial is incorect!”,OD字符串搜索,去到字符串调用处
往上看发现有一个函数调用,之后比较,结果大于或等于则跳转,猜测是比较用户名长度需要大于或等于4,在函数调用处下断,重新运行,分别输入123和123456进行验证,发现用户名长度不足4的直接弹框错误,满足条件的往下跳转对密码进行验证
去用户名一字节赋值给eax,这里我输入的用户名是123456,取一字节也就是"1"的Ascll 31,31*29*2,也就是FB2,结果存放在0x431750处
IMUL DWORD PTR DS:这个寻址方式表明0x431750是一个全局变量,往上翻找到赋值的地方
接着就是字符串赋值,分别是"CW","-","CRACKED",之后将计算结果FB2转换的10进制4018与前面的字符串进行拼接,拼接结果是“CW-4018-CRACKED”,存放在Local.3中,之后用输入的密码654321和CW-4018-CRACKED作比较,即可成功
密码计算方式是用户名首字的Ascll码*29*2转十进制,替换%d即可CW-%d-CRACKED
3.逆向得出正确注册码
看着反汇编猜测 将Hello 和 Dude! 字符串拼接,然后和用户输入内容作比较
验证发现的却如此
注册算法补充:
int main()
{
char szTemp = { 0 };
printf("请输入账号:");
scanf_s("%s",szTemp,MAX_PATH);
long data=(long)szTemp;
printf("序列号为");
data = data * 0x29 * 2;
printf("CW-%d-CRACKED\n",data);
return 0;
}
文件下载:
链接:https://pan.baidu.com/s/1vA5M0dgKS4cCrw8X4TqMzw
提取码:runx
复制这段内容后打开百度网盘手机App,操作更方便哦 薛定谔消失的弦 发表于 2020-1-13 20:13
楼主可以发下到蓝奏云盘分享嘛
论坛里面有这个资源,你去找找看吧 YenKoc 发表于 2020-2-10 22:20
老哥,那段分析注册码的中间的好几个函数,是怎么看出它的功能是啥的,我是个小白,单独拆开看汇编一行一行 ...
其实没有必要每个函数都仔细分析的,我这里看到字符串,就直接输入尝试了。一般注册码都会有一个比较,找到那个比较函数,就能知道正确的注册码,这里的字符串比较地址是42F4D0,函数是CALL 4039FC,当程序运行到这里,EAX存放的是我们输入的注册码“123456”,而EDX是字符串“Hello Dude!”,如果两者相等,程序继续执行,如果不相等,跳转到42F4F1处,执行42F504的地址,弹出“Try Again!!”窗口,这里可以通过修改42F4D5的JNZ标志位,将ZF置1,这是,程序就会弹框“God Job dude!!=)”,表示你输入正确,当然,你也可以直接输入正确注册码“Hello Dude!” 楼主可以发下到蓝奏云盘分享嘛 这个论坛里面有啊,多得是,你去找一下就能找到了 比海更深 发表于 2020-1-14 09:37
论坛里面有这个资源,你去找找看吧
那个软件就是crackme软件么?? 谢谢楼主百忙之中回复 薛定谔消失的弦 发表于 2020-1-15 22:28
那个软件就是crackme软件么?? 谢谢楼主百忙之中回复
就是《》160个crackme》系列中的第一个 老哥,那段分析注册码的中间的好几个函数,是怎么看出它的功能是啥的,我是个小白,单独拆开看汇编一行一行能懂,但是联系起来就不知道咋办了。。。求楼主解答,感谢 老哥,我的意思就是那个几个比如十六进制转成十进制的汇编函数,这个是怎么分析出来的,是直接分析汇编,分析出来的吗,那可能是我汇编太菜了。。。。
页:
[1]
2