新手破解练习Crackme160之087 - crackme

有壳(UPX 0.72), 无法直接解壳, 无法直接运行~, 只能求助于大佬了, 百度了大佬的帖子

  1. 手动去壳(吾爱破解-solly的教程)
    1). OD载入原程序, 第一条语句是 push ad, 我们向下找到pop ad(00409197), 先下个断点, 大佬直接运行程序会异常停在004016F3处, 我这里OD运行不会停, 直接异常到retn, 认真看了下大佬的截图, 发现大佬用的不是OllyDbg(OD), 而是OllyCE (吾爱破解工具集中有), 于是我们也换这个工具, 功能与OD基本一样
    2). OC载入程序, 同理在00409197处先下断点, 两次F9后程序异常停在了004016F3处, 我们在这个方法入口处004016E1处下个断点, 大佬分析所得, 这里的异常是00409139处调用引起的, 所以我们在此处也下个断点, 重新运行程序, F9运行到004016E1处, 在0040171A处选中并右键, 选择"此处为新EIP", 选"是", 程序自动跳过004016E1~0040171A之间的代码, 按几次F9后运行到pop ad(00409197)处, F8两次到00401000处, 右键 "Dump debugged proccess", 导出去壳程序
    3). 工具集中选择"PE工具"下的"ImpREC v1.7 Final 汉化版", 下拉选取"crackme.exe"这个进程, 出来的OEP值是00009000是错误的, 改为00001000, 点"自动查找 IAT" 按钮, 再点"获取输入表", 此时可以在左侧大框中看到cw3220.dll(这个是程序缺少的组件, 可以自己百度下载,本文结尾也附上了该文件), 说明程序引用了正确的组件方法, 点"转储到文件", 选择上一步导出的去壳后的程序, 自动会生成一个带下划线的新文件, 那个便是正常的文件了, 双击可运行了~, 可此去壳完成~
     

  2. 去NAG
    OD重启载入程序, 菜单->插件->API断点设置工具->常用断点设置->勾选MessageBoxA与MessageBoxExA, F9运行, 程序在750515F0处停下, 寄存器区与数据区都可以看到弹框内容, 说明断点位置是我们想要的~, 在数据区, 我们看到, MessageBoxA 来自 0040138D, 我们直接在这行回车来到调用处0040138D的下一行, 上几行为弹框内容入参, 我们直接nop掉0040138D这行即可去掉这个NAG, 保存完成~
    运行程序, 发现还有一个验证文件密钥的弹框, 我们继续去掉, OD重新载入去NAG后的程序, 菜单打开搜索, 定位到"Register.dat"这行在00401106处断点, 程序执行到此处, ctrl+F9运行到方法结尾, F8返回到调用处下一行, 004013E3处马上就是一个关键跳, nop掉, 保存完成~
     

  3. 暴力破解
    首先, 我们需要找到ok按钮的入口, 打开搜索界面, 没有看到成功, 失败相关的字眼, 但发现了三处相同的"\.\SICE", 其实在上一步去NAG过程中, 对应的方法里会遇到这个, 虽然不知道是什么, 它们肯定是关键位置, 我们分别在这三处都打上断点(00401091, 00401188, 00401373), 点ok后成功在00401188这处停下了, 说明0040117D为ok方法入口, F8单步下向执行找关键跳, 004011CD, 004011F7,00401227这三处 jnz改为jmp, 00401254处jge改jmp, 004012C6处nop掉, 保存完成~, 这里也可以一步到位, 在第一处关键跳004011CD处改为 jmp 004012C8, 直接跳到成功处
     

  4. 正常破解
    1). 文件密钥验证, 由IDA分析可得 sub_4010FC方法为:

void sub_4010FC() {
		void* ebp1;
		int32_t eax2;
		int16_t v3;
		int32_t eax4;
		int32_t eax5;

		ebp1 = (void*)((int32_t)"intrinsic"() - 4);
		eax2 = _open("Register.dat", 0);
		if (eax2 + 1 == 0 || ((*(signed char*)&v3 = 53, eax4 = _read(eax2, (int32_t)ebp1 + -56, v3), eax4 + 1 == 0) || (eax5 = lstrcmp((int32_t)ebp1 + -56, "Why didn't n0p3x use a more difficult keyfile method?"), eax5 != 0))) {
			_close();
		}
		return;
	}

 
可知, 是判断文件内容是否为字符串"Why didn't n0p3x use a more difficult keyfile method?",
2). 账号验证, 用户名, 公司名, 系列号都不能为空, 且系列号必须为9位, 验证算法:
code = (len(user) * len(com) + 0xF3EA9)(10) + ":-)"
例:
用户名: abcde
公司名: abc
系列号: (5 * 3 + 0xF3EA9)(10) + ":-)" = 999096:-)

这里是本练习所有文件(包含cw3220.dll): 附件

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

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

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

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

posted @ 2024-06-28 17:30  hankerstudio  阅读(20)  评论(0)    收藏  举报