新手破解练习Crackme160之031 - cracking4all.2

与上一个应用是同一作者, 提示信息什么的都一样, 也是VB写的, 所以我们也是用VB Decomiler分析按钮代码,

  1. 暴力破解, 按钮代码中我们看到00402C5F处是第一次比较, 直接nop掉, 这样不输入也可以继续了, 第二个比较是00402EE2, 验证正确就会跳转到成功分支,那我们直接跳过去,改jmp, 测试发现程序异常了, 单步测试得知在00402CCA处程序需要把输入字符串转整形, 因为没有输入数据, 空串转换异常, 所以我们第一比较不能直接nop, 我们试着直接跳到成功分支看下, 把00402C5F改为 jmp 00402F89, 即第二次比较跳转的地方, 测试,点击ok后无任意提示, 所以我们还要继续跟踪看是什么情况, 看到了还有一次比较00402FC1, nop掉, 不让它跳走, 保存完事~ 终于看到了成功的提示~ 有点小曲折

  2. 正常破解, 还是用反编译代码分析,

Private Sub Command1_Click() '402B40
  loc_00402BE2: var_50 = crackme2.Text1.Text
  loc_00402C14: var_28 = var_50
  loc_00402C5F: If 1 > CInt(Len(var_28)) Then GoTo loc_00402D54
  loc_00402C83: var_78 = Mid(var_28, 1, 1) 
  loc_00402CBA: var_8008 = Asc(CStr(Left(4, 1))) '这个4应该也是字符串'
  loc_00402CCA: var_800C = Asc(CStr(var_78)) '取出一个字符的值'
  loc_00402CD9: var_A8 = Chr(var_8008 xor edx) '每个字符与'4'异或 继续组成新串'
  loc_00402CFC: var_38 = var_38 & var_A8
  loc_00402D4C: var_3C = 1+var_3C '循环'
  loc_00402D4F: GoTo loc_00402C52
  loc_00402D54: ' Referenced from: 00402C5F
  loc_00402D87: If 1 > CInt(Len(var_38)) Then GoTo loc_00402EBA
  loc_00402D92: If 1 <= 4 Then GoTo loc_00402D97
  loc_00402D97: ' Referenced from: 00402D92
  loc_00402DB1: call var_8014 = var_8008 xor edx(var_78, var_38, 00000001h, 2, Me, 0, 0, 0) '这些应该是没用的吧, 没看到下面有用这变量'
  loc_00402DE8: var_80 = &H7D0
  loc_00402DEF: call var_8018 = var_8008 xor edx(var_A8, 2, 1, 2)
  loc_00402E0F: var_8020 = Asc(CStr(var_78))
  loc_00402E41: var_4C = var_4C & Chr(Asc(CStr(var_A8)) xor ecx) '异或结果继续异或一次'
  loc_00402EA4: var_18 = var_18 + 1 '循环'
  loc_00402EB2: var_3C = 1+var_3C
  loc_00402EB5: GoTo loc_00402D80
  loc_00402EBA: ' Referenced from: 00402D87
  loc_00402ED9: var_8024 = (var_4C <> var_D0)
  loc_00402EE2: If var_8024 = 0 Then GoTo loc_00402F89
  loc_00402F60: var_8028 = MsgBox("Password incorrect, please try again ...", 0, "Invalid", 10, 10)
  loc_00402F87: GoTo loc_00402F99
  loc_00402F89: ' Referenced from: 00402EE2
  loc_00402F99: ' Referenced from: 00402F87
  loc_00402FB8: var_802C = (var_4C = "VeiajeEjbavwij") '最终结果是否与这个值相同'
  loc_00402FC1: If var_802C = 0 Then GoTo loc_00403056
  loc_0040302F: var_8030 = MsgBox("Password correct, hehe, :-)", 0, "Valid", 10, 10)
  loc_00403056: ' Referenced from: 00402FC1
  loc_00403062: GoTo loc_004030B7
  loc_004030B6: Exit Sub
  loc_004030B7: ' Referenced from: 00403062
  loc_004030CA: GoTo loc_00esi
End Sub

从上面代码我们大概知道, 我们输入的串取出每一位与4异或, 然后再与2000的每一位分别异或后跟固定串比

#include <iostream>
#include "string.h"

int main(){
	char user[20] = "VeiajeEjbavwij";
	char x[5] = "2000";
	int len = strlen(user);
	for(int i=0; i<len; i++){
		user[i] = user[i] xor x[i%4] xor '4';    
	}
	printf("系列号为: %s\n按任意键继续~", user);
	scanf("a");
	return 0;
}

运行结果为: PamelaAnderson, 这个该不是作者的姓名吧, 安德森帕梅拉

这是160个软件part1
这是160个软件part2

1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-05-10 15:27  hankerstudio  阅读(4)  评论(0)    收藏  举报