新手破解练习Crackme160之057 - Eternal Bliss
056无法运行,跳过~
-
按钮去灰, OD主线程界面Ctrl+B查找二进制Command1(这个怎么来的? 是用VB Decomiler查看控制得到的check按钮的名称就是这个) 会搜索到2个结果 00401753与004022D8, 后面这个是控制的定义, 前面那个才是控件属性的定义, 找到00401770处即为Enabled属性的设置, 目前的值为08 00, 我们改为08 FF(其实后两位只要不是0就可以01~FF都行), 如何修改? 在00401771行右键->数据窗口中跟随->选择, 在下面的数据区中就定位到这个值了, 点中这个值直接输入FF确定就行, 保存完事~ (后记: Text1控制输入再删除后, check按钮又会变灰, 所以我们找到text1的change事件00404257处, VB Decomiler中change事件代码可知00404429处是设置为false的地方, 我们直接定位过去, 将这行nop掉, 保存, 这样就再也不会灰了)
-
暴力破解, OD加载搜索关键字定位到上面第一个关键跳00403A7E, nop掉进入成功分支, 此时还没完全成功, 因为它还要判断是否选择了类型所以继续向上找到004039D1把je改成jmp即可(也可以直接一步完成, 改为jmp 00403A84), 保存, 搞定~
-
正常破解, VB Decomiler查看点击事件,
Private Sub Command1_Click() '403604
loc_00403664: global_52 = False
loc_00403682: var_8004 = (global_68 = 1)
loc_0040368C: If var_8004 = 0 Then GoTo loc_004036D2
loc_0040369C: var_98 = Form1.strin
loc_004036EB: var_800C = (global_68 = 2)
loc_004036F5: If var_800C = 0 Then GoTo loc_0040373B
loc_00403705: var_98 = Form1.vari
loc_00403754: var_8014 = (global_68 = 3)
loc_0040375E: If var_8014 = 0 Then GoTo loc_004037A4
loc_0040376E: var_98 = Form1.lon
loc_004037BD: var_801C = (global_68 = 4)
loc_004037C7: If var_801C = 0 Then GoTo loc_0040380D
loc_004037D7: var_98 = Form1.curr
loc_00403826: var_8024 = (global_68 = 5)
loc_00403830: If var_8024 = 0 Then GoTo loc_00403876
loc_00403840: var_98 = Form1.sing
loc_0040388F: var_802C = (global_68 = 6)
loc_00403899: If var_802C = 0 Then GoTo loc_004038DF
loc_004038A9: var_98 = Form1.dou
loc_004038F8: var_8034 = (global_68 = 7)
loc_00403902: If var_8034 = 0 Then GoTo loc_00403948
loc_00403912: var_98 = Form1.inte
loc_00403961: var_803C = (global_68 = 8)
loc_0040396B: If var_803C = 0 Then GoTo loc_004039B1
loc_0040397B: var_98 = Form1.byt
loc_004039C7: var_8044 = (global_68 = False)
loc_004039D1: If var_8044 = 0 Then GoTo loc_00403A5B
loc_00403A37: MsgBox("Choose a compare method!!", 16, "Error!!", 10, 10)
loc_00403A56: GoTo loc_00403B84
loc_00403A5B: ' Referenced from: 004039D1
loc_00403A74: var_8048 = (global_52 = 1)
loc_00403A7E: If var_8048 = 0 Then GoTo loc_00403B05
loc_00403AE4: MsgBox("Well Done! Go to next one!", 64, "Good Work!", 10, 10)
loc_00403B03: GoTo loc_00403B84
loc_00403B05: ' Referenced from: 00403A7E
loc_00403B65: MsgBox("Wrong! Try again!", 0, "Wrong!", 10, 10)
loc_00403B84: ' Referenced from: 00403A56
loc_00403B84: ' Referenced from: 00403B03
loc_00403B90: GoTo loc_00403BAD
loc_00403BAC: Exit Sub
loc_00403BAD: ' Referenced from: 00403B90
End Sub
虽然代码很乱, 但也能大概看出一点名堂出来, 选中哪个类型就从对应的一个方法去取值, 所以我们分别进入每个方法去分析
第一个loc_0040369C: var_98 = Form1.strin, 直接双击就可进入该方法也可从左侧对应点击进入, 代码如下:
Public Sub strin() '40449F
loc_00404513: var_20 = Form1.Text1.Text
loc_0040451B: var_3C = var_20
loc_0040456C: If ("String" = var_20) Then GoTo loc_0040458A
loc_00404585: global_52 = CInt(1)
loc_0040458A: ' Referenced from: 0040456C
loc_0040458F: GoTo loc_004045A2
loc_004045A1: Exit Sub
loc_004045A2: ' Referenced from: 0040458F
End Sub
可以看到如果输入值为"String"时就跳转, 那说明这个String就是答案了~
同理可得剩下所有类型对应的答案:
1). String => String
2). Variant => Empty
3). Long => &H2C2FAE (2895790)
4). Currentcy => &H8180754 (135792468)
5). Single => 9764317691904
6). Double => 1.47258369789456E17
7). Integer => &H5BEF (23535)
8). Byte => 239
各值验证一下, 其中4).Currentcy验证失败, 其它都是正确的, 我们继续单步跟踪看是什么情况, 经过几遍的尝试完全没明白, 看流程似乎都是正常的, 数据读进去后, 出来的就变了, 没一点规律, 135792468=>2A9E4140, 傻了, 看了网上大佬的解释说是VB的字符串转货币型会后4位是作为小数的, 所以正确的输入答案应该是13579.2468, 中间有个小数点
1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号