首页
社区
课程
招聘
[原创] ctf2017第5题分析
发表于: 2017-6-11 10:25 3673

[原创] ctf2017第5题分析

2017-6-11 10:25
3673

1. 确定大概流程

OD启动,发现有反调试,直接尝试先屏蔽驱动相关的,

运行起来后,断在GetWindowTextA,可以得到输入字符串,然后通过内存访问断点,可以定位到字符串处理和最后的比较点.


 

因为屏蔽了驱动,可以对照IDA看看这个函数流程。

这里是通过WriteFile传入倒序后的字符到驱动,然后通过ReadFile读取返回数据.

可以直接跳过驱动操作,直接跳到401E78,看看对返回数据的处理

先是对驱动返回的0x10数据转字符串,然后再进行MD5,再转字符串,取第3个字符开始的10个字符和目标串比较.

这里,根据传入数据和输出数据,就可以猜测是MD5了,可以直接验证下,都不用具体看算法了,当然里面也有比较明显的特征

 

 

2.  分离驱动文件

通过断在DeleteFileA,或者通过找驱动加载相关的字符串引用点,得道驱动文件vmxdrv.sys

IDA分析,确定主要的处理点

直接看WriteFile的处理,关键点sub_104B6

dword_114D8是操作码222004会影响的变量,交叉引用就可以看到对应设置。

这里是对传入字符串各个字符加了对应增量,如654321变为766666,然后MD5后返回.

 

 

3. 枚举

 

最近对node.js有点兴趣,尝试写了个函数跑了下

 

var fs = require('fs');

var path = require('path');

var Crypto = require('crypto');

const util = require('util');

function ctf_5() {

    var patternBuf = new Buffer("pqrstuvwxyzabcdefghijklmno0123456789");

    var strIn = "123456"; 

    var buf = new Buffer(7);   

    var iLen = patternBuf.length;

    console.log("iLen: " + iLen);

 

    for (var a1 = 0; a1 < iLen; a1++) {

        for (var a2 = 0; a2 < iLen; a2++) {

            for (var a3 = 0; a3 < iLen; a3++) {

                for (var a4 = 0; a4 < iLen; a4++) {


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回