首页
社区
课程
招聘
[原创][源码]个人写的 crackme
发表于: 2009-9-22 17:57 6032

[原创][源码]个人写的 crackme

2009-9-22 17:57
6032

本来是想写给cm 大赛的。但动作太迟缓了。没报上名。把源码帖上来,以备以后使用。若能对和我一样的菜鸟有所帮助,则甚感欣慰。

注册码规则:
用户名和注册码都是8 个 ascII 字符。

一组可用的注册码:
用户名:abcdefgh
注册码:hcafbegd
算法描述:

注册码的算法:
使用了“八皇后”问题模型。“八皇后”问题的描述为:将国际象棋中的 8 个皇后放到棋盘的单元格中,要求任意两个皇后不在同一行、同一列或方格的同一条对角线上。
用户名每个字母代码棋盘的行号。行号从 0开始。注册码每个字母表示是各行的皇后所在的列号。列号从 0开始。
行号和列号的计算方法是:各个字母在字串中的由小到大的排序索引。
例如,上面的注册码中,注册码中第一个字母 h 在注册码字串中由小到大排序后的索引为 7 。用户名中,与之对应的 a 在用户名串中由小到大排序后的索引值为 0 。则第0行的皇后位于第7 列。
依次把皇后放好以后,检查皇后的放置是否符合规则,符合则认为注册码合法。

反调试:
程序中开辟了一个后台线程,这个线程负责设置一个函数指针,以决定较验注册码调用的函数。正常情况下,后台线程启动时将函数指针指向错误的较验函数,用竞争锁持有一个变量。当发现有线程等待此锁时,修改函数指针指向正确的较验函数,并释放此锁,以使前台进程继续执行。
当程序被跟踪调试时,后台线程被挂起。则程序会执行错误的较验函数。这个函数是计算 128 个皇后放到棋盘的问题。很考验调试者的耐心和cpu的质量。

本人菜鸟。只为熟悉 windows 编程和复习 c++ 而做此题目。所以只为 爆破 而跑进来的人,对不起啦,这东东没一点儿挑战性。涉及到一些有意思的知识点。
1、手动查找API地址并调用之,哈希API字串。是为了避免静态分析到 createthread()等敏感的函数。
2、八皇后算法。用来较验注册码。避免了明文比较。

我有空就会编辑着帖一下对代码的说明。或流程什么的。有问题请跟帖。
运行环境:windows XP. 编译环境 vs2005

[1] 手动查找API地址并调用之
如果我们调用了系统API,正常编译的情况下,编译器会在导入表中生成此API的信息。比如,API的名称字串。解密者很容易根据这些信息猜测程序的执行流程,甚至设计思路。所以我们想把它隐藏起来。隐藏需要做两个工作:1、避免导入表中携带 api字串信息。2、避免在程序中直接 call 此 api。
关于HASH API的原因和方法,下文有描述甚为用心,我就不耍斧头了。
参考文章【Anti Virus专题】1.2 - 3.hash扫描获得api函数地址
上面的文章中代码都是用 汇编来实现的。我用c 实现了一下,虽然指令多了些,但更方便菜鸟学习。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (7)
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看看,顶下LZ~
2009-9-22 18:44
0
雪    币: 351
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
可以看看。。
2009-9-22 22:04
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
4
support!
2009-9-22 22:12
0
雪    币: 466
活跃值: (175)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
5
哎,代码不能语法高亮是很郁闷的事情。
2009-9-23 11:37
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
有时间看看
2009-9-23 13:41
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
2009-9-23 14:52
0
雪    币: 9
活跃值: (142)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
8
C写的????????
2009-9-28 11:55
0
游客
登录 | 注册 方可回帖
返回
//