一个有意思的ctf题目

步骤如下

1.这个题目是迄今遇到的最坑题目。话不多说,上题目。链接:http://pan.baidu.com/s/1hr5CtpU 密码:r9wi

2.首先运行题目,如下图所示,跟平常的题目没什么两样。随便输入字符串,发现弹出报错信息。咋一看,有关键字符串,好咧,这题不难,肯定可以找到关键挑战,然后问题就简单了。(太天真。。。)

image

3 打开OD载入程序,搜索字符串,发现关键字符串,很高兴。

image

在字符串上方发现两个跳转都跳到失败处,猜想应该是二次验证,一个一个分析,分析第一个call crackme.00402e40 ,发现是对输入的字符串进行一系列处理,然后得到一个数值,在下面语句中发现是和0x92381221 进行比较。不等则跳转向失败,打开IDA,分析关键call ,发现0x92381221代表的十进制数2453148193刚好符合条件,心中顿感,我实在是太聪明了。

image

继续往下看下一个跳转,call crackme.00401DF0,发现是两个字符串比较,猜想是我们前面的字符串进行再次的运算得到一堆字符串然后比较,然后分析可得处理函数为call crackme.00401990,分析关键call 发现是把输入进行MD5运算得到的一堆字符串。沃日。。。这控制不了啊。。。然后感觉不太对,于是我尝试暴力把跳转改一下,看会出现什么情况。发现既弹出了成功,又弹出来失败,感觉不对。

4.想着对消息框下个断点,F9运行,点击工具栏的W发现,竟然出现了两个输入Input,觉得肯定玄机在此,觉得其中一个按钮一定是被隐藏了,在command 位置下断点,输入 bp ShowWindow,寻找ShowWindow函数,重新运行程序,发现运行到了用户层,alt+f9运行出来,发现前面就是ShowWindow 窗口在此下断点,删除刚刚下的user32里的断点,发现参数信息为0时,为隐藏,为1时为显现,于是更改参数值如下图所示:

image

复制到可执行文件,保存文件。再次运行发现果然出现了两个输入按钮。

5.修改后的程序重新加载进OD,此时发现感觉没什么思路,对获取输入字符串的函数进行下断点,在IDA中发现有GetWindowText函数,双加该函数,ctrl+x 获取其引用的位置,记下地址,在OD中ctrl+g 查找,找到该函数位置下断点,重新运行程序,输入字符串,点击左边的Input,程序运行到断点处,F8单步运行,发现下面有一个call ,F7进去看看,发现是获取字符串的长度,感觉好多Crackme都会对字符串的长度进行检查,于是对存字符串的位置下一个内存访问断点,看看是否有什么意外的惊喜,F9运行程序,发现程序到了这,IDA查看此位置的反编译结果,发现果然是对字符串的长度进行了检查,0x27u说明字符串长度为39,79,79,67,84,70,123,125刚好是题目所说的格式00CTF{},继续运行寻找返回的地方。最后回到401f96的位置,此处果然为一个调用,检查长度和格式。如果不符合返回值为0,跳到失败的位置。符合的话返回值为1,继续往下进行。

image
image

6 继续往下分析,分析各个call 的作用,发现call 1.00401860 位置的call 有很大的嫌疑,里面有各种循环,猜测为算法处理过程,IDA定位此处位置分析基本确定此位置,继续向下运行,查找字符串比较的过程,发现地址为401fca的调用,是弹出错错误的位置,此处下断点,重新运行程序到这个位置,F7进去分析,同时打开IDA,定位此函数,辅助分析,果然发现了两个MessageBOXA函数。分析不同的弹框结果发现前面是一个字符串比较函数,IDA按table键定位此函数的位置。

image

进去发现是一个一个进行字符的比较,比较字符串b5h760h64R867618bBwB48BrW92H4w5r 错误的话最后函数返回值为1,弹出错误对话框。

7.现在的问题就只剩下解决算法出路的问题了。IDA反编译出的代码如下

image

分析可知其对数字不做变换,大写字母减去65然后再进行关键操作,
V9=(V6+V5V7)%26+((V6+V5V7)%26<0?0X1a:0)
v6在调试的时候会出现32-2-2=28,v5情况有点复杂,可能是3或者5,待会再说为什么,小写字母减去97然后进行关键操作,这样就进行了字符串的变换。
关于v6的问题:该数值最早是函数0041458e 的返回值,返回值为-1的时候就赋值为3,否则为原数。我用3进行测试的时候发现是错误的,那这个函数0041458e 就很有问题。
在此处下断点,F7进去发现是再次调用了函数41459c,继续跟进去同时观察IDA的结果,

image

发现其实就是判断_mbschr((const unsigned __int8 *)(a3 + *(_DWORD *)this),a2))的结果,点击该函数进去,OD定位该位置,单步运行会发现,其实是检查输入字符串的第六位是否为0,如果为0则返回 值为0的地址,后面是字符串的地址减去该地址为5,即为v6,否则的话返回值为-1,在后面的判断中赋值为3.此为v6的具体赋值过程。

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

推荐阅读更多精彩内容