吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8158|回复: 12
收起左侧

[原创] [反汇编练习] 160个CrackMe之057.58.59.60.61.62.63(Eternal Bliss系列)静态分析

[复制链接]
pk8900 发表于 2017-12-29 21:52
本帖最后由 pk8900 于 2017-12-31 08:45 编辑

【适合破解新手的160个crackme练手】第57个Eternal Bliss.exe,这个Eternal Bliss.exe系列的都是VB程序,也比较简单,论坛里没人发贴,我在这一帖子中全部写下来,其它的在下面的楼层。
【crackme简介】
       下载地址:http://pan.baidu.com/share/link?shareid=541269&uk=4146939145
       Microsoft Visual Basic 5.0 / 6.0编写,无壳,共有8个验证,有提示文字。
标注为?,估计难度为1星。
工具:X64dbg,VB Decompiler
【crackme截图】
Image 2.png
【分析过程】
既然是VB程序,那就要请出VB Decompiler,通过VB Decompiler中代码分析,并在X64DBG中进行验证,可以得到程序的大体框架信息。
[Visual Basic] 纯文本查看 复制代码
Private Sub Command1_Click() '403604
  loc_00403622: var_eax = %y 'Ignore this '__vbaChkstk
  loc_0040364D: var_eax = arg_8.AddRef 'Ignore this
  loc_00403664: ecx = False
  loc_0040368C: If (arg_8 = 1) = 0 Then GoTo loc_004036D2
  loc_00403696: var_eax = Me.1784
  loc_0040369C: var_98 = Me.1784
  loc_004036F5: If (arg_8 = 2) = 0 Then GoTo loc_0040373B
  loc_004036FF: var_eax = Me.1788
  loc_00403705: var_98 = Me.1788
  loc_0040375E: If (arg_8 = 3) = 0 Then GoTo loc_004037A4
  loc_00403768: var_eax = Me.1792
  loc_0040376E: var_98 = Me.1792
  loc_004037C7: If (arg_8 = 4) = 0 Then GoTo loc_0040380D
  loc_004037D1: var_eax = Me.1796
  loc_004037D7: var_98 = Me.1796
  loc_00403830: If (arg_8 = 5) = 0 Then GoTo loc_00403876
  loc_0040383A: var_eax = Me.1804
  loc_00403840: var_98 = Me.1804
  loc_00403899: If (arg_8 = 6) = 0 Then GoTo loc_004038DF
  loc_004038A3: var_eax = Me.1808
  loc_004038A9: var_98 = Me.1808
  loc_00403902: If (arg_8 = 7) = 0 Then GoTo loc_00403948
  loc_0040390C: var_eax = Me.1812
  loc_00403912: var_98 = Me.1812
  loc_0040396B: If (arg_8 = 8) = 0 Then GoTo loc_004039B1
  loc_00403975: var_eax = Me.1800
  loc_0040397B: var_98 = Me.1800
  loc_004039D1: If (arg_8 = False) = 0 Then GoTo loc_00403A5B
  loc_00403A07: var_34 = "Error!!"
  loc_00403A20: var_24 = "Choose a compare method!!"
  loc_00403A37: MsgBox(var_24, 16, var_34, var_44, var_54)
  loc_00403A4E: call undef 'Ignore this '__vbaFreeVarList(00000004, var_24, var_34, var_44, var_54, arg_8, arg_8, arg_8, arg_8, arg_8, arg_8, arg_8, arg_8, 0, esi, ebx)
  loc_00403A56: GoTo loc_00403B84
  loc_00403A5B: 'Referenced from: 004039D1
  loc_00403A7E: If (arg_8 = 1) = 0 Then GoTo loc_00403B05
  loc_00403AB4: var_34 = "Good Work!"
  loc_00403ACD: var_24 = "Well Done! Go to next one!"
  loc_00403AE4: MsgBox(var_24, 64, var_34, var_44, var_54)
  loc_00403AFB: call undef 'Ignore this '__vbaFreeVarList(00000004, var_24, var_34, var_44, var_54)
  loc_00403B03: GoTo loc_00403B84
  loc_00403B05: 'Referenced from: 00403A7E
  loc_00403B35: var_34 = "Wrong!"
  loc_00403B4E: var_24 = "Wrong! Try again!"
  loc_00403B65: MsgBox(var_24, 0, var_34, var_44, var_54)
  loc_00403B7C: call undef 'Ignore this '__vbaFreeVarList(00000004, var_24, var_34, var_44, var_54)
  loc_00403B84: 'Referenced from: 00403A56
  loc_00403B90: GoTo loc_00403BAD
  loc_00403BA4: call undef 'Ignore this '__vbaFreeVarList(00000004, var_24, var_34, var_44, var_54, var_00403BAE)
  loc_00403BAC: Exit Sub
  loc_00403BAD: 'Referenced from: 00403B90
End Sub

在CHECK按钮事件代码中,可以看到,程序通过arg_8的值来确定选择了哪一种验证模式,然后验证是否正确。
Image 1.png
通过查看各种验证方式对应的代码,方式1和2最简单,明码比较,静态分析就能发现,VB Decompiler中代码如下:
loc_004044E7: var_1C = "String"
  loc_004044F4: var_eax = Unknown_VTable_Call[eax+00000318h]
  loc_00404513: var_20 = arg_8.MousePointer
  loc_0040451B: var_3C = var_20
  loc_00404552: var_18 = var_20
  loc_0040455A: var_eax = %fobj
  loc_0040456C: If (var_1C <> var_18) <> 0 Then GoTo loc_0040458A
  loc_00404585: ecx = CInt(1)
  loc_0040458A: 'Referenced from: 0040456C
可明显看出var_1C = "String"后,又有(var_1C <> var_18)的比较,经验证方式一String的注册码就是“String”,方式二Variant的注册码为:"Empty",接下来是方式三:long,在VB Decompiler反编译的代码中并未发现固定值,但发现关键比较代码为:var_24 <> 0,这就要进行动态调试了。
[Visual Basic] 纯文本查看 复制代码
loc_00404747: var_eax = %y 'Ignore this '__vbaChkstk  loc_0040476F: var_eax = arg_8.AddRef 'Ignore this
  loc_00404774: On Error Resume Next
  loc_00404788: var_eax = Unknown_VTable_Call[eax+00000318h]
  loc_004047A7: var_28 = arg_8.MousePointer
  loc_004047AF: var_44 = var_28
  loc_004047DE: var_20 = CLng(var_28)
  loc_004047EC: var_eax = %fobj
  loc_004047F7: If var_24 <> 0 Then GoTo loc_00404815
  loc_00404810: ecx = CInt(1)
  loc_00404815: 'Referenced from: 004047F7
  loc_00404815: GoTo loc_00404830
  loc_0040482B: ecx = False

     X64DBG中,00404747下断,并查看代码发现如下代码:
Image 4.png
我们找到了关键的值:0x2C2FAE(十进制:2895790),2895790就是第三种方式long的注册码。
第四种方式,Currency,按理解应该为货币格式数据,可这里却不同,我们在程序中找到了关键值:0x8180754(十进制:135792468),按说输入数字:135792468就能注册,但这里不行,通过跟踪发现,程序在调用了:VBA_vbaCyStr后,却变成了:1357924680000,也就是将这个值后面补了4个0,经多次尝试发现输入13579.2468的浮点数后,VBA_vbaCyStr处理后内存中的数据为135792468,所以第四种方式的注册码为:13579.2468,(总结:VB中货币数据格式后四位为小数位,没有小数位的用0进行占位)后面的几种就差不多了,分别压入各数据类型的数据,然后和我们输入的值进行比较。第五种:Single:注册码为:9764317691904,第六组:Double:注册码为:147258369789456000,第七种:Integer注册码为:23535,第八种:BYTE:注册码为:239
      通过这个Crackme我们可以学习到VB程序各种数据类型在内存中的存放形式,估计下几个系列CRACKME会和这方面有关系吧。

Eternal Bliss系列共7个,分别在以下楼层。
160个CrackMe之057  (Eternal Bliss.exe)       顶楼
160个CrackMe之058  (Eternal Bliss.1.exe)    2楼
160个CrackMe之059  (Eternal Bliss.2.exe)    3楼
160个CrackMe之060  (Eternal Bliss.3.exe)    5楼
160个CrackMe之061  (Eternal Bliss.4.exe)    6楼
160个CrackMe之062  (Eternal Bliss.9.exe)    7楼
160个CrackMe之063  (Eternal Bliss.10.exe)  8楼

免费评分

参与人数 3吾爱币 +7 热心值 +3 收起 理由
Poner + 6 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
朱朱你堕落了 + 1 膜拜楼主!
GGbond + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| pk8900 发表于 2017-12-29 23:13
本帖最后由 pk8900 于 2017-12-30 17:44 编辑

160个CrackMe之060 (Eternal Bliss .03 .exe)静态分析+代码整理
经整理VB Decompiler中的代码,代码如下:
[Visual Basic] 纯文本查看 复制代码
Private Sub Command1_Click()
var_4C = &HAF6DB9
var_48 = &H7FFFFFFF
var_20 = &H52        ' 52:'R'
var_44 = &H65       '65:'e'
var_50 = &H76        ' 76:'v'
var_34 = &H72       ' 72:'r'
var_3C = &H73       ' 73:'s'
var_10C = 1
var_114 = 2
loc_00402B93:    var_54 = Text1.Text
loc_00402C27:   For var_30 = 1 To Len(var_54) Step 1
  

loc_00402D0B:   var_A4 = Mid(var_54, CLng(var_30), 1)
loc_00402D2C:   var_40 = var_40 + Asc(CStr(var_A4))
loc_00402D2E:   If Err.Number <> 0 Then GoTo loc_0040382D
loc_00402D78:   Next var_30
  
loc_00402D93:   var_20 = var_20 + var_44
loc_00402D96:   If Err.Number <> 0 Then GoTo loc_0040382D
loc_00402D9C:   var_20 = var_20 + var_50
loc_00402D9F:   If Err.Number <> 0 Then GoTo loc_0040382D
loc_00402DA5:   var_20 = var_20 + var_44
loc_00402DA8:   If Err.Number <> 0 Then GoTo loc_0040382D
loc_00402DAE:   var_20 = var_20 + var_34
loc_00402DB1:   If Err.Number <> 0 Then GoTo loc_0040382D
loc_00402DB7:   var_20 = var_20 + var_3C
loc_00402DBA:   If Err.Number <> 0 Then GoTo loc_0040382D
loc_00402DC0:   var_20 = var_20 + var_44
loc_00402DC3:   If Err.Number <> 0 Then GoTo loc_0040382D

loc_00402DD2:   If var_20 <> var_40 Then GoTo Wrong

loc_00402F76:   var_A4 = Mid(var_54, 2, 1)
loc_00402FC9:   var_D4 = Mid(var_54, 4, 1)
loc_0040301C:   var_104 = Mid(var_54, 7, 1)
loc_00403115:   If Asc(var_A4) <> var_44 Or Asc(var_D4) <> var_44 Or Asc(var_104) <> var_44 Then GoTo Wrong

loc_0040317E:   MsgBox "You have cracked it!!"

loc_0040348C:   GoTo loc_0040375C
Wrong:   'Referenced from: 00402DD2

loc_004034C2:   MsgBox "Wrong! Try Again!!"

loc_0040375C:   Exit Sub
loc_00403766:   GoTo loc_004037ED

loc_004037EC:   Exit Sub
loc_004037ED:   'Referenced from: 00403766

loc_0040382D:
End Sub

这段中var_20 累加的值分别是R、e、v、e、r、s、e,与我们输入注册码累加值比较,所以最终注册值可以是:Reverse
其中有几处VB Decompiler反编译的不是准确,必须对Crackme动态调试:
[Visual Basic] 纯文本查看 复制代码
 loc_00402EC2: var_eax = frmAbout.Label3 'Ignore this
  loc_00402EEA: var_64 = frmAbout.Label3.MousePointer
  loc_00402EF2: var_14C = var_64
  loc_00402F42: var_18C = var_54
  loc_00402F52: var_7C = var_18C
  loc_00402F76: var_A4 = Mid(var_18C, 2, 1)
  loc_00402F92: var_190 = var_5C
  loc_00402FA2: var_AC = var_190
  loc_00402FC9: var_D4 = Mid(var_190, 4, 1)
  loc_00402FE5: var_194 = var_64
  loc_00402FF5: var_DC = var_194
  loc_0040301C: var_104 = Mid(var_194, 7, 1)
  loc_0040302C: var_58 = CStr(var_A4)
  loc_0040303A: Asc(var_58) = Asc(var_58) - var_44
  loc_00403041: esi = Asc(var_58) + 1
  loc_0040304F: var_60 = CStr(var_D4)
  loc_0040305D: Asc(var_60) = Asc(var_60) - var_44
  loc_00403064: eax = Asc(var_60) + 1
  loc_00403075: var_68 = CStr(var_104)
  loc_00403083: Asc(var_68) = Asc(var_68) - var_44
  loc_0040308A: eax = Asc(var_68) + 1
  loc_00403090: var_150 = Asc(var_68) + 1
  loc_00403104: call undef 'Ignore this '__vbaFreeVarList(00000009, var_84, var_94, var_A4, var_B4, var_C4, var_D4, var_E4, var_F4, var_104)
  loc_00403115: If var_150 = 0 Then GoTo loc_00403491

这段代码:在调试器中代码如下:
[Asm] 纯文本查看 复制代码
0040302C | E8 19 E2 FF FF            | call <eterna._vbaStrVarVal>               | var_58=CStr(var_A4)
00403031 | 50                        | push eax                                  |
00403032 | E8 19 E2 FF FF            | call <eterna.rtcAnsiValueBstr>            |
00403037 | 0F BF F0                  | movsx esi, ax                             |
0040303A | 2B 75 BC                  | sub esi, dword ptr ss:[ebp-0x44]          |
0040303D | F7 DE                     | neg esi                                   |
0040303F | 1B F6                     | sbb esi, esi                              |
00403041 | 46                        | inc esi                                   | esi=Asc(Asc(var_58)`-`var_44)`+`1
00403042 | F7 DE                     | neg esi                                   |
00403044 | 8D 85 2C FF FF FF         | lea eax, dword ptr ss:[ebp-0xD4]          |

这段代码就是将:var_A4和var_44进行对比,如果不一样结果为0,一样的话,结果为-1,以下两次比较也是如此,三次结果以 位加法 操作累加,有一次为0则最终结果为0,注册失败。所以说:第2、4、7个字符是e(var_44='e').Reverse满足这个条件。
Crackme中最后那段除法运算比较没有什么意义,跟我们输入的序列号无关可以省略去掉。
 楼主| pk8900 发表于 2017-12-29 23:09
本帖最后由 pk8900 于 2017-12-30 17:44 编辑

160个CrackMe之059 (Eternal Bliss .02 .exe)静态分析+代码整理
通过VB Decompiler 中对该Crackme的反编译,程序主要代码集中位于Private Sub Command1_Click()事件中,且反编译的很清析,共有四个循环读取字符后累加并与固定串组合进行对比,固定串共组合5组,通过将其转为ASCII,根据ASCII值找到对应的字符组成字符串:“This is the correct code”,这就是最终的注册码。这种程序可以采用将VB Decompiler中反编译的代码进行整理,然后用VB构建程序,即得到CrackMe的源码,适当修改后,即可做成注册机。
整理后的VB源码如下:
[Visual Basic] 纯文本查看 复制代码
Private Sub Command1_Click()
loc_00402B64:   var_6C = "10511532"
loc_00402B89:   var_AC = "10132"
loc_00402B90:   On Error Resume Next
loc_00402BB2:   var_3C = "116104"
loc_00402BD7:   var_BC = "1141019911632"
loc_00402BFC:   var_DC = CInt(1)
loc_00402C1E:   var_4C = "84104"
loc_00402C43:   var_8C = "99111"
loc_00402C68:   var_9C = "114"
loc_00402C8D:   var_CC = "100101"
loc_00402CC8:   var_168 = Form1.Text1.Text

loc_00402E34:   For var_2C = 1 To 5 Step 1
loc_00402F17:   var_118 = Mid(var_168, CLng(var_2C), 1)
loc_00402F2A:   var_E4 = CStr(var_118)
loc_00402F62:   var_7C = var_7C & Asc(var_E4)
loc_00402FAE:   Next var_2C
loc_00402FB3:
loc_00402FEF:   var_E4 = CStr(var_4C & var_6C)   '8410410511532  [This ]
loc_00403026:   If Err.Number <> 0 Then GoTo loc_004043E9
loc_00403042:   var_DC = (Val(CStr(var_7C)) - var_E4)
loc_00403088:   'If (var_DC = False) = 0 Then GoTo loc_004030D0
loc_004030AA:   var_DC = CInt(1)
loc_004030C9:   var_7C = False
loc_004030CE:   GoTo loc_004030D5
loc_004030D0:   'Referenced from: 00403088
loc_004030D1:   GoTo loc_0040403E
loc_004030D5:   'Referenced from: 004030CE
loc_00403138:   For var_2C = 6 To 8 Step 1
loc_00403186:   var_168 = Form1.Text1.Text
loc_0040321B:   var_118 = Mid(var_168, CLng(var_2C), 1)
loc_0040322E:   var_E4 = CStr(var_118)
loc_00403266:   var_7C = var_7C & Asc(var_E4)
loc_004032B2:   Next var_2C
loc_004032BD:   'Referenced from: 00403143
loc_004032E0:   var_E4 = CStr(var_6C)             '10511532   [is ]
loc_00403317:   If Err.Number <> 0 Then GoTo loc_004043E9
loc_00403333:   var_DC = (Val(CStr(var_7C)) - var_E4)
loc_00403379:   'If (var_DC = False) = 0 Then GoTo loc_004033C1
loc_0040339B:   var_DC = CInt(1)
loc_004033BA:   var_7C = False
loc_004033BF:   GoTo loc_004033C6

loc_004033C1:   GoTo loc_0040403E
loc_004033C6:   'Referenced from: 004033BF
  
  
loc_00403429:   For var_2C = 9 To 12 Step 1
loc_0040346F:   var_E0 = Form1.Text1.Text
loc_00403477:   var_168 = var_E0
loc_004034CA:   var_234 = var_E0
loc_004034DD:   var_F0 = var_234
loc_0040350C:   var_118 = Mid(var_234, CLng(var_2C), 1)
loc_0040351F:   var_E4 = CStr(var_118)

loc_00403557:   var_7C = var_7C & Asc(var_E4)
  
loc_004035A3:   Next var_2C
  
loc_004035AE:   'Referenced from: 00403434
  
loc_004035E7:   var_E4 = CStr(var_3C & var_AC)   '11610410132  [the ]
loc_0040361E:   If Err.Number <> 0 Then GoTo loc_004043E9
loc_0040363A:   var_DC = (Val(CStr(var_7C)) - var_E4)
loc_00403680:   'If (var_DC = False) = 0 Then GoTo loc_004036C8
loc_004036A2:   var_DC = CInt(1)
loc_004036C1:   var_7C = False
loc_004036C6:   GoTo loc_004036CD
loc_004036C8:   GoTo loc_0040403E
loc_004036CD:   'Referenced from: 004036C6
loc_00403730:   For var_2C = 13 To 20 Step 1
loc_00403735:
loc_00403776:   var_168 = Form1.Text1.Text
loc_00403813:   var_118 = Mid(var_168, CLng(var_2C), 1)
loc_00403826:   var_E4 = CStr(var_118)
loc_0040385E:   var_7C = var_7C & Asc(var_E4)
  
loc_004038AA:   Next var_2C


loc_00403910:   var_E4 = CStr(var_8C & var_9C & var_BC)  '991111141141019911632 [correct ]
loc_00403947:   If Err.Number <> 0 Then GoTo loc_004043E9
loc_00403963:   var_DC = (Val(CStr(var_7C)) - var_E4)
loc_004039A9: '  If (var_DC = False) = 0 Then GoTo loc_004039F1
loc_004039CB:   var_DC = CInt(1)
loc_004039EA:   var_7C = False
loc_004039EF:   GoTo loc_004039F6

loc_004039F1:   GoTo loc_0040403E
loc_004039F6:   'Referenced from: 004039EF
loc_00403A40:   var_168 = Form1.Text1.Text '
loc_00403AD7:   For var_2C = 21 To Len(var_168) Step 1
 
loc_00403AF8:  ' GoTo loc_00403C72
loc_00403AFD:

loc_00403BD0:   var_118 = Mid(var_168, CLng(var_2C), 1)
loc_00403BE3:   var_E4 = CStr(var_118)
loc_00403BEE:   var_140 = Asc(var_E4)
loc_00403C1B:   var_7C = var_7C & Asc(var_E4)
  
loc_00403C67:   Next var_2C

loc_00403C94:   var_F8 = var_8C & var_CC     '99111100101  [code]
loc_00403CAE:   var_E4 = CStr(var_F8)
loc_00403CE5:   If Err.Number <> 0 Then GoTo loc_004043E9
loc_00403D01:   var_DC = (Val(CStr(var_7C)) - var_E4)
loc_00403D47:   If (var_DC = False) = 0 Then GoTo loc_0040403E
loc_00403D55:   MsgBox "You have solved it! Good Work!"
loc_00403D89:
loc_0040403E:   'Referenced from: 004030D0     This is the correct code
loc_00404046:   MsgBox "Wrong! Try Again!!"
  
loc_004040BE:   'Referenced from: 00402DCC
loc_004042B0:   'Referenced from: 00404039
loc_00404307:   'Referenced from: 004042BB
loc_004043E9:
End Sub

在此基础上略加改动就可以做出注册机了。
 楼主| pk8900 发表于 2017-12-29 23:05
本帖最后由 pk8900 于 2017-12-30 00:26 编辑

160个CrackMe之058  (Eternal Bliss.1.exe)
直接用VB Decompiler静态分析
[Visual Basic] 纯文本查看 复制代码
  loc_00403101: var_20 = Label3.MousePointer
  loc_00403137: var_40 = (var_20 = "use hexeditor to look for hardcoded codes")
  loc_00403152: If var_40 = 0 Then GoTo loc_00403555
  '.............................................................................................................
  loc_00403550: GoTo loc_004036E7
  loc_00403555: 'Referenced from: 00403152
  loc_00403555: call var_2C(var_00402630, 00000094h, var_2C, var_2C, var_2C, var_2C)
  loc_0040355C: Set var_2C = var_2C(var_00402630, 00000094h, var_2C, var_2C, var_2C, var_2C)
  loc_00403569: Label4.MousePointer = "Yes! You have solved it!!"
  loc_00403592: call var_2C(var_2C)
  loc_00403599: Set var_2C = var_2C(var_2C)
  loc_004035A2: Label4.Height = 0


通过这句:var_40 = (var_20 = "use hexeditor to look for hardcoded codes")可知:真正的注册码为:"use hexeditor to look for hardcoded codes"
wszjf 发表于 2017-12-29 23:12
谢谢分享,点赞
 楼主| pk8900 发表于 2017-12-29 23:15

160个CrackMe之 061

本帖最后由 pk8900 于 2017-12-30 20:29 编辑

这个Crackme在VB Decompiler中的代码可读性非常差,光看VB Decompiler中的代码已不能确定程序的流程。具体分析过程很难理清,写一下程序的注册工作流程吧。


程序共3部分序列号,在程序中分别有三段代码进行处理:
Code -> Form1 -> rout_403625
Code -> Form1 -> rout1_4039E3
Code -> Form1 -> rout2_403D55
这三段分别处理序列号中的三段,第一段:
读入系统日期:
[Visual Basic] 纯文本查看 复制代码
loc_00403679: var_54 = Date 
 loc_00403698: var_64 = "Short Date"
  loc_004036AD: var_74 = Format(var_54, var_64)

第一部分这段还比较清楚,读入后对读入的日期进行遍历,遇到‘/’则结止,此时取出的为日期中的年(具体要看电脑中时间格式设置,我把电脑中的短时间改为YY/MM/DD格式,当前日期为:17/12/30,如果不带/分隔符的日期格式,程序会触发错误,跳到失败位置),此时程序取出17/12/30中的17,17就是第一部分的序列号了。
第二部分:累加第一部分取出的17和取出的月份12,得到和为29再乘上月份12,即:348
第三部分:为第二部分的值:348加上17/12/30中的日期30=378,再乘日期30,即:11340
序列号连起来就是:17  348 11340
另外:在分别判断的代码中,如果我们最后一位输入符号“.”,则返回我们输入的值+1.我们输入16. 就会返回17,因此序列号也可以为:16.    347.   11339.
[Visual Basic] 纯文本查看 复制代码
var_54 = Right(var_2C, 1)
  loc_004038F7: var_98 = (var_54 = &H4027B0)
  loc_00403901: call undef 'Ignore this '__vbaFreeVar(arg_8, var_AC, var_BC)
  loc_0040390F: If var_98 = 0 Then GoTo loc_0040394F
  loc_00403937: var_ret_3 = CLng(var_2C + 1)
  loc_00403948: call undef 'Ignore this '__vbaFreeVar
  loc_0040394D: GoTo loc_00403961
  loc_0040394F: 'Referenced from: 0040390F
  loc_00403953: var_ret_4 = CLng(var_2C)

这里可以看出:一个返回是:ret_4 = CLng(var_2C),另一个是:ret_3 = CLng(var_2C + 1)
 楼主| pk8900 发表于 2017-12-29 23:16

160个CrackMe之 062 整理反汇编代码

本帖最后由 pk8900 于 2017-12-30 21:57 编辑

160个CrackMe之 062
VB Decompiler中的反汇编代码进行整理,如下:
[Visual Basic] 纯文本查看 复制代码
Private Sub Command1_Click() '403B40
loc_00403BC2:   var_B4 = Text1.Text
loc_00403BCA:   var_160 = var_B4
loc_00403C09:   var_1B8 = var_B4
loc_00403C1C:   var_CC = var_1B8
loc_00403C69:   var_B8 = Text2.Text
loc_00403C71:   var_168 = var_B8
loc_00403CB0:   var_1BC = var_B8
loc_00403CC3:   var_EC = var_1BC
loc_00403CEF:   var_ret_1 = (var_1B8 = var_124)
loc_00403D22:   var_16C = CBool(var_114 Or (var_1BC = var_134))
loc_00403D62:   If var_16C = 0 Then GoTo loc_00403E1C
loc_00403DC5:   var_11C = var_48
loc_00403DF3:   MsgBox "NULL"
loc_00403E17:   GoTo loc_004045EF
loc_00403E1C:   'Referenced from: 00403D62

loc_00403EC5:   var_68 = Text1.Text

loc_00403F41:   For var_7C = 1 To Len(var_68) Step 2
loc_00403FC6:       var_44 = CStr(Asc(CStr(Mid(var_68, CLng(var_7C), 1))))
                    var_28 = 0
loc_0040404B:       For var_8C = 1 To Len(var_44) Step 1
loc_004040A4:       var_E4 = Mid(var_44, CLng(var_8C), 1)
loc_004040D5:       var_28 = var_28 + CInt(var_E4)
loc_004040F8:       Next var_8C
loc_004041C6:       var_B0 = var_B0 & CStr(var_28) & Mid(var_68, CLng(var_7C + 1), 1)
loc_0040421A:   Next var_7C

loc_00404268:   var_B4 = Text2.Text
                Text2.Text = var_B0
loc_004043A7:   If (var_B0 <> CStr(var_B4)) Then GoTo loc_004044D2
  MsgBox "Great Work..."
loc_004044CD:   GoTo loc_004045EF
loc_004044D2:   'Referenced from: 004043A7
  
loc_004045CB:   MsgBox "Nope. That is not the code to register."
loc_004045EF:   'Referenced from: 00403E17
loc_004045FB:   GoTo loc_00404662
loc_00404661:   Exit Sub
loc_00404662:   'Referenced from: 004045FB
End Sub

以上代码即可以模拟程序的运行流程,又可以生成注册代码:用户名:52pojie.cn 注册码:824o7i2.18n
 楼主| pk8900 发表于 2017-12-29 23:16

160个CrackMe之 063

本帖最后由 pk8900 于 2017-12-30 20:52 编辑

160个CrackMe之 063
这个是VC++的程序
没有什么算法可言:
注册码为:“Correct...Error
比较位置:
[Asm] 纯文本查看 复制代码
004015BD | C6 45 FC 05           | mov byte ptr ss:[ebp-4], 5      |
004015C1 | 8B 00                 | mov eax, dword ptr ds:[eax]     |
004015C3 | 8B 0E                 | mov ecx, dword ptr ds:[esi]     |
004015C5 | 50                    | push eax                        |
004015C6 | 51                    | push ecx                        |
004015C7 | FF 15 F8 43 40 00     | call dword ptr ds:[<&mbscmp>]   |
这只猪 发表于 2017-12-30 09:50
@pk8900 求x64dbg的皮肤
 楼主| pk8900 发表于 2017-12-30 11:28
这只猪 发表于 2017-12-30 09:50
@pk8900 求x64dbg的皮肤

我也是在论坛里搜索到的,你可以搜索一下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 15:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表