逆向分析练习六(实战CrackMe01)
admin
2024-02-27 10:10:40
0

逆向分析练习六(实战CrackMe01)

这次我们选择一个简单的Crackme程序进行算法逆向分析的实战

这次选的这个程序应该是汇编写的所以比较小也没有像是c或者c#编译出来的呢种启动函数之类的,还是比较简单的一个程序,我们主要是对里面的代码逻辑进行分析为主,爆破为辅。

程序的下载我会放在文章最后

逆向代码

这是从od中复制出来的代码,代码量比较小就全部复制出来给大家看了。

CPU Disasm
Address   Hex dump          Command                                  Comments
00401000  /$  6A 00         PUSH 0                                   ; /ModuleName = NULL
00401002  |.  E8 34010000   CALL     ; \KERNEL32.GetModuleHandleA
00401007  |.  A3 EC234000   MOV DWORD PTR DS:[4023EC],EAX
0040100C  |.  6A 00         PUSH 0                                   ; /InitParam = 0
0040100E  |.  68 29104000   PUSH 00401029                            ; |DialogProc = abexcm5.401029
00401013  |.  6A 00         PUSH 0                                   ; |hParent = NULL
00401015  |.  6A 01         PUSH 1                                   ; |TemplateName = 1
00401017  |.  FF35 EC234000 PUSH DWORD PTR DS:[4023EC]               ; |hInst = NULL
0040101D  |.  E8 3D010000   CALL        ; \USER32.DialogBoxParamA
00401022  |.  6A 00         PUSH 0                                   ; /ExitCode = 0
00401024  |.  E8 1E010000   CALL          ; \KERNEL32.ExitProcess
00401029  |$  C8 0000 00    ENTER 0,0                                ; ||Arg1 => ARG.EBP
0040102D  |.  817D 0C 11010 CMP DWORD PTR SS:[EBP+0C],111            ; ||
00401034  |.  75 07         JNE SHORT 0040103D                       ; ||
00401036  |.  E8 1B000000   CALL 00401056                            ; |\abexcm5.00401056
0040103B  |.  EB 13         JMP SHORT 00401050                       ; |
0040103D  |>  837D 0C 02    CMP DWORD PTR SS:[EBP+0C],2              ; |
00401041  |.  75 07         JNE SHORT 0040104A                       ; |
00401043  |.  E8 E5000000   CALL 0040112D                            ; \abexcm5.0040112D
00401048  |.  EB 06         JMP SHORT 00401050
0040104A  |>  33C0          XOR EAX,EAX
0040104C  |.  C9            LEAVE
0040104D  |.  C2 1000       RETN 10
00401050  |>  33C0          XOR EAX,EAX
00401052  |.  C9            LEAVE
00401053  \.  C2 1000       RETN 10
00401056  /$  837D 10 65    CMP DWORD PTR SS:[EBP+10],65             ; abexcm5.00401056(guessed Arg1,Arg2,Arg3,Arg4)
0040105A  |.  74 10         JE SHORT 0040106C
0040105C  |.  837D 10 02    CMP DWORD PTR SS:[EBP+10],2
00401060  |.  0F84 C7000000 JE 0040112D
00401066  |.  33C0          XOR EAX,EAX
00401068  |.  C9            LEAVE
00401069  |.  C2 1000       RETN 10
0040106C  |>  6A 25         PUSH 25                                  ; /MaxCount = 37.
0040106E  |.  68 24234000   PUSH OFFSET 00402324                     ; |String
00401073  |.  6A 68         PUSH 68                                  ; |ItemID = 104.
00401075  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hDialog => [ARG.EBP+8]
00401078  |.  E8 F4000000   CALL        ; \USER32.GetDlgItemTextA
0040107D  |.  6A 00         PUSH 0                                   ; /SysNameSize = 0
0040107F  |.  6A 00         PUSH 0                                   ; |SysName = NULL
00401081  |.  68 C8204000   PUSH OFFSET 004020C8                     ; |pFlags = abexcm5.4020C8 -> 0
00401086  |.  68 90214000   PUSH OFFSET 00402190                     ; |pMaxNameLength = abexcm5.402190 -> 0
0040108B  |.  68 94214000   PUSH OFFSET 00402194                     ; |pSerialNumber = abexcm5.402194 -> 0
00401090  |.  6A 32         PUSH 32                                  ; |VolumeSize = 50.
00401092  |.  68 5C224000   PUSH OFFSET 0040225C                     ; |VolumeName = abexcm5.40225C -> 00
00401097  |.  6A 00         PUSH 0                                   ; |Root = NULL
00401099  |.  E8 B5000000   CALL             ; \KERNEL32.lstrcat
004010AD  |.  B2 02         MOV DL,2
004010AF  |>  8305 5C224000 /ADD DWORD PTR DS:[40225C],1
004010B6  |.  8305 5D224000 |ADD DWORD PTR DS:[40225D],1
004010BD  |.  8305 5E224000 |ADD DWORD PTR DS:[40225E],1
004010C4  |.  8305 5F224000 |ADD DWORD PTR DS:[40225F],1
004010CB  |.  FECA          |DEC DL
004010CD  |.^ 75 E0         \JNZ SHORT 004010AF
004010CF  |.  68 FD234000   PUSH OFFSET 004023FD                     ; /Src = "L2C-5781"
004010D4  |.  68 00204000   PUSH OFFSET 00402000                     ; |Dest
004010D9  |.  E8 63000000   CALL             ; \KERNEL32.lstrcat
004010DE  |.  68 5C224000   PUSH OFFSET 0040225C                     ; /Src
004010E3  |.  68 00204000   PUSH OFFSET 00402000                     ; |Dest
004010E8  |.  E8 54000000   CALL             ; \KERNEL32.lstrcat
004010ED  |.  68 24234000   PUSH OFFSET 00402324                     ; /String2
004010F2  |.  68 00204000   PUSH OFFSET 00402000                     ; |String1
004010F7  |.  E8 51000000   CALL            ; \KERNEL32.lstrcmpiA
004010FC  |.  83F8 00       CMP EAX,0
004010FF  |.  74 16         JE SHORT 00401117
00401101  |.  6A 00         PUSH 0                                   ; /Type = MB_OK|MB_DEFBUTTON1|MB_APPLMODAL
00401103  |.  68 34244000   PUSH OFFSET 00402434                     ; |Caption = "Error!"
00401108  |.  68 3B244000   PUSH OFFSET 0040243B                     ; |Text = "The serial you entered is not correct!"
0040110D  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hOwner => [ARG.EBP+8]
00401110  |.  E8 56000000   CALL            ; \USER32.MessageBoxA
00401115  |.  EB 16         JMP SHORT 0040112D
00401117  |>  6A 00         PUSH 0                                   ; /Type = MB_OK|MB_DEFBUTTON1|MB_APPLMODAL
00401119  |.  68 06244000   PUSH OFFSET 00402406                     ; |Caption = "Well Done!"
0040111E  |.  68 11244000   PUSH OFFSET 00402411                     ; |Text = "Yep, you entered a correct serial!"
00401123  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hOwner => [ARG.EBP+8]
00401126  |.  E8 40000000   CALL            ; \USER32.MessageBoxA
0040112B  |.  EB 00         JMP SHORT 0040112D
0040112D  |$  6A 00         PUSH 0                                   ; /Result = 0
0040112F  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hDialog => [ARG.EBP+8]
00401132  |.  E8 22000000   CALL              ; \USER32.EndDialog
00401137  |.  C9            LEAVE
00401138  \.  C2 1000       RETN 10
0040113B   $- FF25 6C304000 JMP DWORD PTR DS:[<&KERNEL32.GetModuleHa
00401141   $- FF25 70304000 JMP DWORD PTR DS:[<&KERNEL32.lstrcatA>]
00401147   $- FF25 74304000 JMP DWORD PTR DS:[<&KERNEL32.ExitProcess
0040114D   $- FF25 78304000 JMP DWORD PTR DS:[<&KERNEL32.lstrcmpiA>]
00401153   $- FF25 7C304000 JMP DWORD PTR DS:[<&KERNEL32.GetVolumeIn
00401159   $- FF25 84304000 JMP DWORD PTR DS:[<&USER32.EndDialog>]
0040115F   $- FF25 88304000 JMP DWORD PTR DS:[<&USER32.DialogBoxPara
00401165   .- FF25 8C304000 JMP DWORD PTR DS:[<&USER32.wsprintfA>]
0040116B   $- FF25 90304000 JMP DWORD PTR DS:[<&USER32.MessageBoxA>]
00401171   $- FF25 94304000 JMP DWORD PTR DS:[<&USER32.GetDlgItemTex

分析

  1. 进入od后的入口点就是00401000呢我们就从这里开始看
  2. 前面一大段是启动过程,然后调用了Windowsapi开启了一个dialogbox窗口
  3. 这个dialogbox传入的过程函数是401029,所以说这个程序启动后我们输入内容点击确认后会执行到401029部分的代码,随后就是退出
  4. 我们来看一下401029的部分,这里可以看出来他是通过getdialogText函数获取我们输入的文本内容
  5. 我们输入的文本内容存入了402324
  6. 随后调用了getvolumeinformation,这个函数是获取卷信息的函数存入了40225c
  7. 然后又将40225c和4023F3两个字符串合并
  8. 合并出来就是卷名称-ABEX
  9. 下面是一个循环首先赋予DL=2,随后每次对40225c开始的四个字符依次做dec的操作,循环两次
  10. 随后又将4023fd和40225c拼接
  11. L2C-5781+刚刚减完之后的字符串
  12. 如果上述字符串和我们输入的一致则返回注册成功否则返回注册失败

整个的算法逻辑就是上面这个了

最后我这边破解出来的密码就是这个:L2C-57816784-ABEX

当然如果只是爆破的话就很简单了,只需要把004010FF位置的je改为jne或者jmp就可以了

CrackMe程序下载,如果暂时看不到可能是还在审核可以一两天再来看下,不需要积分的哦

相关内容

热门资讯

安卓系统有什么便利功能 你有没有发现,安卓系统自从问世以来,就一直是手机界的“人气王”?它那丰富的功能,简直让人爱不释手。今...
网易棋牌安卓系统不能用 最近有没有小伙伴发现,网易棋牌在安卓系统上有点儿不给力呢?这可真是让人头疼啊!今天,就让我来给你详细...
什么软件只支持安卓系统,解锁移... 你知道吗?在手机应用的世界里,有些软件可是只对安卓系统情有独钟呢!它们就像那些只对某一款香水情有独钟...
信息延迟解决安卓系统,解锁安卓... 你有没有遇到过这种情况?手机里下载了新应用,却总是慢吞吞地加载,或者打开网页时总是卡壳,这可真是让人...
如何破解系统回到安卓,揭秘破解... 你是不是也和我一样,对安卓系统爱得深沉,但又偶尔想体验一下其他系统的魅力呢?比如,有时候想破解一下系...
安卓系统如何批量传图 你是不是也有过这样的烦恼:手机里的照片太多,想要一次性传给朋友或者备份到电脑上,却不知道怎么操作?别...
安卓跟苹果的系统版本,全面解析... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近安卓和苹果的系统版本又来了一场“大比...
安卓系统matter是什么,智... 你有没有听说最近安卓系统里有个新玩意儿叫Matter?没错,就是那个听起来有点神秘,又让人好奇不已的...
ios能转安卓系统吗,揭秘如何... 你有没有想过,你的iPhone换成安卓手机后,那些珍贵的iOS系统应用怎么处理呢?今天,就让我来带你...
小米7是不是安卓系统,安卓系统... 你有没有想过,小米7这款手机是不是运行在安卓系统上呢?这个问题听起来可能有点简单,但你知道吗,它背后...
安卓系统的手机搬家软件,一键迁... 你有没有想过,当你换了一部新手机,如何把旧手机里的照片、联系人、音乐、应用等宝贝全部搬到新手机上呢?...
苹果手机支持的安卓系统,探索跨... 你知道吗?最近有个话题在科技圈里可是炸开了锅,那就是苹果手机竟然支持安卓系统了!是不是觉得有点不可思...
鸿蒙系统安装安卓早期app,畅... 你有没有发现,最近手机界又掀起了一股热潮?没错,就是华为的鸿蒙系统!这款全新的操作系统一经推出,就吸...
安卓机耍苹果系统,跨界体验新篇... 你知道吗?在科技圈里,最近可是掀起了一股不小的风浪呢!那就是安卓机竟然开始“耍”苹果系统了。这可不是...
安卓手机修改系统界面,安卓手机... 你有没有想过,你的安卓手机界面其实可以变得超级个性?没错,就是那种别人一看就知道是你手机的感觉!今天...
安卓更新新系统很卡,安卓系统升... 亲爱的安卓用户们,最近是不是发现更新了新系统后,手机变得超级卡顿?别急,今天就来聊聊这个让人头疼的问...
安卓登录注册系统有哪些,功能解... 你有没有想过,每次打开安卓手机,那熟悉的登录注册界面背后,竟然隐藏着如此复杂的系统?今天,就让我带你...
安卓学生系统下载地址,开启智慧... 你有没有听说最近安卓学生系统火得一塌糊涂?这可是专为学生们打造的操作系统,听说功能强大,学习生活两不...
安卓原厂悦联系统,智能生活新体... 你知道吗?在手机界,有一个系统可是隐藏的宝藏哦!那就是安卓原厂悦联系统。它就像是一颗璀璨的明珠,镶嵌...
为何中国做不出安卓系统 你有没有想过,为什么咱们中国做不出像安卓那样全球知名的操作系统呢?这背后可是有着不少故事和原因哦!让...