40个crackme--逆向入门教程01

今天是第一个crackme的教程,实验程序下载地址:链接: https://pan.baidu.com/s/183HghBtTQkAkkyLHS4KKqw 提取码: 9t92 

一、我们先来看看这个程序到底是什么样子的。

运行结果

  弹出一个窗口,窗口名为Key File ReverseMe, 内容是Evaluation period out of date. Purchase new license。

  看来程序的功能就是要验证license(许可证)。

二、用ollydbg打开程序

用ollydbg打开程序

程序入口点在401000,没有加壳。我们右键单击反汇编窗口-搜索-所有引用的字符串,可以看到很多被引用的字符串,也能找到刚刚打开程序时 弹出的窗口的字符串"Evaluation period out of date. Purchase new license"


双击该字符串

    Alt+C回到CPU窗口。按F8开始调试,走到不远处看到 KERNEL32.CreateFile 这个Win32API


CreateFile

    我们去MSDN上看看这个函数的原型

MSDN的CreateFile定义

    可以看到程序试图创建一个名为Keyfile.dat的文件,打开方式是OPEN_EXISTING。但是我们并没有名为Keyfile.dat的文件在程序目录下。

    在下一行,我们看到汇编代码是CMP EAX, -1,说明CreateFile函数对返回值(函数的返回值存放于EAX中)与-1(打开失败)进行了比较。然后便是JNE跳转。我们在跳转指令处按F2下一个断点。


CreateFile对返回值进行了比较

    我们先不管他,让他正常执行,此时跳转未实现。按F8继续执行,程序弹出消息框。


跳转未实现

 三、我们应该能猜测刚刚的跳转是因为CreateFile返回值的影响。

    在刚刚的断点处按 ' ; ' 键写上备注。在程序目录新建一个Keyfile.dat文件然后Ctrl+F2重新执行程序,按F9执行到断点处,按F8继续执行,程序跳转了。

    我们可以看到跳转后的地址是准备调用KERNEL32.ReadFile这个API,我们猜测应该就是对刚刚的的Keyfile.dat文件进行读操作。

KERNEL32.ReadFile

    往下一行可以看到TEST EAX, EAX(EAX存放返回值)这条汇编指令。我们可以在这里下断点。先正常执行可以得到以下结果,许可证错误。可以知道判断的算法就在这之后了。 

四、对算法进行剖析

    Ctrl+F2重新执行程序,到执行完ReadFile处停下。TEST EAX, EAX 执行完后,对后一条指令JNZ SHORT 004010B4有影响。我们先看看004010F7处的程序。是我们一开始运行时弹出的对话框,应该可以猜到是ReadFile读取文件出错时跳转。

ReadFile后的汇编指令

    那004010B4处开始的汇编代码就是验证Keyfile.dat的算法了。按F8单步调试。

    在4010B8处有条指令是 CMP DWORD PTR DS:[402173],10。从之前调用ReadFile这个API的参数可以看出,402173的数据区是存放着读取的字符串长度。通过下一条指令( JL SHORT 004010F7 )也可以看出,Keyfile.dat文件里的字符串应该至少是16个字节的长度,在此处设断点并添加备注。先正常执行,发现弹出许可证出错的消息框。

    重新执行,向Keyfile.dat写入20个 '1' 继续执行,按F9跳到断点处。此时一直按F8发现进入了一个循环。

循环

    分析循环的指令,从EBX+40211A处每次读取一个字节放入AL中。从Readfile这个API的参数可以看出读取的字符串是放在数据区40211A的地方,从右边的也可以看到我们写入Keyfile.dat的字符串(4010B4处XOR EBX, EBX 将EBX置零了)。

    可以发现先是对AL与0进行了比较,相等时跳出循环。因为字符串以'\0'结尾,所以应该是读取到字符串末尾后跳出循环。往下若没有到末尾,则执行CMP AL, 47指令。47H对应的ASCII码为 'G',即与将AL的值与'G'比较。不相等时跳转到INC EBX,否则INC ESI。可以看出ESI是存放字符串中'G'的个数。

循环及往后的指令

    结束循环后,可以看到CMP ESI, 8 与 JL SHORT 004010F7 这两条指令。如果JL跳转实现,则跳转至004010F7处(许可证错误对话框),否则跳转至401205处。所以关键就是在这两条指令里了。可以看出,Keyfile.dat中的'G'的个数应该是要大于8,同时字符串长度要大于16字节。如此,在Keyfile.dat中写入20个'G'测试一下。结果成功。

成功

五、暴力破解

    如果不在程序目录生成一个Keyfile.dat文件并满足要求的话,也可以直接爆破。我们知道00401205处便是验证成功的代码,所以直接将CreateFile之后的JNE 改成 JMP 00401205。测试成功。选取刚刚修改的地方,右键-备份-可执行文件,再右键保存即可。

六、总结

    这一个CrackMe还是十分简单的,主要就是仔细和耐心,很快就能CrackIt,是一个给新手练手的好程序。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • Return-Oriented-Programming(ROP FTW) Author: Saif El-Sher...
    RealSys阅读 3,322评论 0 2
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,813评论 0 27
  • 1.地址总线,数据总线,控制总线在哪里,它们有什么作用?答:它们都是cpu连接外部组件的线路。地址总线:地址总线A...
    MagicalGuy阅读 1,457评论 0 1
  • 那年的冬季很冷很冷,怀胎十月的妈妈在疼得死去活来的煎熬中大约晚上十点左右生下了我。由于我是冬天出生,所以我的...
    李冬燕520阅读 347评论 0 0
  • 文/槐林斋主人 七十年代,农民的日子太艰苦了,现在的娃们是想像不出来的。一大家人一年到头分不到一斤油,来了客人,用...
    槐林深处是吾家阅读 450评论 0 5