52_aha 发表于 2017-9-16 01:45

160CrackMe练手 001

# 160CrackMe 001

学了差不多快两周了,一直在看书,偶尔得知了这个160CrackMe,不知道第一个是不是最简单的,拿来练练手,对我这个逆向新手来说还是很有难度,欢迎大家和我一起交流一起学习,个人对编程熟悉点,逆向刚开始学习

peid判断无壳,打开输入伪码注册,根据报错od查找字符串
接下来定位到字符串周边代码

```asm

0042FA15|.8D55 F0       lea edx,
0042FA18|.8B83 DC010000 mov eax,dword ptr ds:
0042FA1E|.E8 35B0FEFF   call Acid_bur.0041AA58
0042FA23|.8B45 F0       mov eax,
0042FA26|.0FB640 03   movzx eax,byte ptr ds:
0042FA2A|.6BF0 0B       imul esi,eax,0xB
0042FA2D|.8D55 EC       lea edx,
0042FA30|.8B83 DC010000 mov eax,dword ptr ds:
0042FA36|.E8 1DB0FEFF   call Acid_bur.0041AA58
0042FA3B|.8B45 EC       mov eax,                        ;堆栈中可看到都是你输入的用户名
0042FA3E|.0FB640 02   movzx eax,byte ptr ds:
0042FA42|.6BC0 0E       imul eax,eax,0xE
0042FA45|.03F0          add esi,eax
0042FA47|.8935 58174300 mov dword ptr ds:,esi
0042FA4D|.A1 6C174300   mov eax,dword ptr ds:
0042FA52|.E8 D96EFDFF   call Acid_bur.00406930
0042FA57|.83F8 04       cmp eax,0x4                              ;如果用户名长度大于等于4跳转
0042FA5A|.7D 1D         jge short Acid_bur.0042FA79
0042FA5C|.6A 00         push 0x0
0042FA5E|.B9 74FB4200   mov ecx,Acid_bur.0042FB74                ;Try Again!
0042FA63|.BA 80FB4200   mov edx,Acid_bur.0042FB80                ;Sorry , The serial is incorect !
0042FA68|.A1 480A4300   mov eax,dword ptr ds:
0042FA6D|.8B00          mov eax,dword ptr ds:
0042FA6F|.E8 FCA6FFFF   call Acid_bur.0042A170
0042FA74|.E9 BE000000   jmp Acid_bur.0042FB37
0042FA79|>8D55 F0       lea edx,
0042FA7C|.8B83 DC010000 mov eax,dword ptr ds:
0042FA82|.E8 D1AFFEFF   call Acid_bur.0041AA58
0042FA87|.8B45 F0       mov eax,                        ;取你输入的用户名
0042FA8A|.0FB600      movzx eax,byte ptr ds:            ;取用户名的第一个字母放入eax
0042FA8D|.F72D 50174300 imul dword ptr ds:             ;eax = eax * 29h
0042FA93|.A3 50174300   mov dword ptr ds:,eax
0042FA98|.A1 50174300   mov eax,dword ptr ds:
0042FA9D|.0105 50174300 add dword ptr ds:,eax          ; = eax * 2
0042FAA3|.8D45 FC       lea eax,
0042FAA6|.BA ACFB4200   mov edx,Acid_bur.0042FBAC                ;CW
0042FAAB|.E8 583CFDFF   call Acid_bur.00403708                   ;观察堆栈可发现"CW" ==>
0042FAB0|.8D45 F8       lea eax,
0042FAB3|.BA B8FB4200   mov edx,Acid_bur.0042FBB8                ;CRACKED
0042FAB8|.E8 4B3CFDFF   call Acid_bur.00403708                   ;观察堆栈可发现"CRACKED"放入了
0042FABD|.FF75 FC       push                            ;Acid_bur.0042FBAC
0042FAC0|.68 C8FB4200   push Acid_bur.0042FBC8                   ;-;两个push把"CW"和"-"入栈
0042FAC5|.8D55 E8       lea edx,
0042FAC8|.A1 50174300   mov eax,dword ptr ds:
0042FACD|.E8 466CFDFF   call Acid_bur.00406718                   ;用户名第一个字母*29*2的值放入
0042FAD2|.FF75 E8       push
0042FAD5|.68 C8FB4200   push Acid_bur.0042FBC8                   ;-
0042FADA|.FF75 F8       push                            ;"用户名第一个字母*29*2","-","CRACKED"入栈
0042FADD|.8D45 F4       lea eax,
0042FAE0|.BA 05000000   mov edx,0x5
0042FAE5|.E8 C23EFDFF   call Acid_bur.004039AC                   ;CW-算好的数据-CRACKED放入
0042FAEA|.8D55 F0       lea edx,
0042FAED|.8B83 E0010000 mov eax,dword ptr ds:
0042FAF3|.E8 60AFFEFF   call Acid_bur.0041AA58
0042FAF8|.8B55 F0       mov edx,                        ;取出你输入的密码=>edx
0042FAFB|.8B45 F4       mov eax,                        ;正确密码=>eax
0042FAFE|.E8 F93EFDFF   call Acid_bur.004039FC
0042FB03|.75 1A         jnz short Acid_bur.0042FB1F            ;判断密码是否正确
0042FB05|.6A 00         push 0x0
0042FB07|.B9 CCFB4200   mov ecx,Acid_bur.0042FBCC                ;Congratz !!
0042FB0C|.BA D8FB4200   mov edx,Acid_bur.0042FBD8                ;Good job dude =)
0042FB11|.A1 480A4300   mov eax,dword ptr ds:
0042FB16|.8B00          mov eax,dword ptr ds:
0042FB18|.E8 53A6FFFF   call Acid_bur.0042A170
0042FB1D|.EB 18         jmp short Acid_bur.0042FB37
0042FB1F|>6A 00         push 0x0
0042FB21|.B9 74FB4200   mov ecx,Acid_bur.0042FB74                ;Try Again!
0042FB26|.BA 80FB4200   mov edx,Acid_bur.0042FB80                ;Sorry , The serial is incorect !
```

注册算法就是password = "CW-" + 取用户名第一位asciix29x2 + "=CRACKED"

注册机(python):
```python

import sys

username = sys.argv
password = ord(username)*0x29*0x2
print("password:"+"CW-"+"%d"%(password)+"-CRACKED")
```

测试:
```bash

C:\Users\Administrator\Desktop>python 1.py akkuman
password:CW-7954-CRACKED
```

![](http://ww1.sinaimg.cn/large/c0264382gy1fjkbn9nb37j20di068407.jpg)

52_aha 发表于 2017-9-17 00:17

Cyrus_xxx 发表于 2017-9-16 18:48
两周的学习时间就能够分析的如此清晰,厉害!

其实是因为有编程的底子,汇编学起来理解的倒是挺快,然后找了些简单的破文看了些贴,倒是可以搞一些十分简单的程序了

pk8900 发表于 2017-12-24 20:41

https://www.52pojie.cn/thread-403484-1-1.html
第一个的,首先这160个不是按难度排列的,其次论坛已经有不少文章关于这方面的,我现在进度是53个,53之前约有4-5个没有人发贴,可以论坛里搜索。

y2008 发表于 2017-9-16 03:40

哎,现在都没心思学习了

灰太狼大王 发表于 2017-9-16 06:35

厉害,我001都没学会

带色的小马甲 发表于 2017-9-16 09:13

一上手就分析算法,厉害了

52_aha 发表于 2017-9-16 10:36

带色的小马甲 发表于 2017-9-16 09:13
一上手就分析算法,厉害了

以前有编程基础:loveliness:可能也是运气比较好,对了,我想问下,为什么有的程序调试的时候,第二次重新开始调试就无法f7,f8了

带色的小马甲 发表于 2017-9-16 10:49

52_aha 发表于 2017-9-16 10:36
以前有编程基础可能也是运气比较好,对了,我想问下,为什么有的程序调试的时候,第二次重新 ...

小白一个,看看是不是断点作怪

52_aha 发表于 2017-9-16 14:50

带色的小马甲 发表于 2017-9-16 10:49
小白一个,看看是不是断点作怪

论坛找了方法od配置文件Restore Windows 的值该为0,有的程序还是第二次打开就无法单步

風—飞鸟 发表于 2017-9-16 16:55

感谢分享!!!

Cyrus_xxx 发表于 2017-9-16 18:48

两周的学习时间就能够分析的如此清晰,厉害!

bestyyb 发表于 2017-9-16 21:51

可惜我不会编程,所以什么算法也不懂。
页: [1] 2
查看完整版本: 160CrackMe练手 001