一个go语言crackme分析

一个go语言crackme分析
by anhkgg(公众号:汉客儿)
2019年2月23日

0x01.先看看

直接运行看看,尝试输入,看看结果。

1.png

一个console的程序,有提示信息,入手点应该很明显,找字符串,或者printfscanf之类的函数。

查个壳,是tElock 1.0 (private) -> tE! *,没脱过,常规脱壳方法尝试弄不掉,百度一番看到挺多经验分享的,但都是0.9x版本的分析,不适用于本版本,那就放弃脱壳了(求脱壳大佬分享技巧)。

0.png

OD加载后直接运行,通过字符串搜索去查找,并未找到提示信息“口令解码失败”。

尝试再命令窗口输入bp printf,然后F9,OD断下,此时参数如下,OD并没有解析出中文字符,用工具查看一番,发现是UTF-8编码。

2.png

所以前面OD解析“口令解码失败”编码问题,搜索不到。再次尝试进入内存(M)窗口,Ctrl+B后在HEX输入字符的UTF-8编码,然后搜索,果然找到了。

另外找到一篇讨论OD编码问题的文章,有兴趣的可以看看:https://bbs.pediy.com/thread-181118.htm

3.png

不过此处也没什么用了,因为bp printf也能找到关键代码。

在输入uid和口令之后,在printf断下,查看此时调用堆栈。

调用堆栈 
地址       堆栈       函数过程 / 参数                       调用来自                      结构
1104BE80   00461BBD   <jiubugao.printf>                     jiubugao.00461BB8
1104BE84   1104C160     format = ""
1104BE88   110101B0
1104BEA4   004635DD   jiubugao.00461AD0                     jiubugao.004635D8
1104BEC4   00462FA1   jiubugao.004635A0                     jiubugao.00462F9C
1104BEF8   0047BA5A   包含jiubugao.00462FA1                   jiubugao.0047BA58
1104BF28   0047BAF5   jiubugao.0047B9F0                     jiubugao.0047BAF0
1104BF4C   0048C220   <jiubugao.printf>                     jiubugao.0048C21B
1104BF50   1104BF9C     format = "?J"
1104BF54   00000001
1104BFCC   0042609A   包含jiubugao.0048C220                   jiubugao.00426098

此时做了一番思考,作为console程序,整个代码都在main中完成,可能大概代码结构如下:

int main() {
    printf("【春节】解题领红包之三\n");
    printf("请输入您的吾爱破解uid:);
    scanf("%s", &uid);
    printf("请输入您的口令:);
    scanf("%s", &code);
    if(check(uid, code)) {
        printf("口令解码失败");    
    } else {
        //
    }
}

那么通过调用栈回溯到mian,真个代码结构就会很清楚了,算法分析也应该会更简单。

OD中回溯直到0048C220看到结构类似上面猜测的代码,然后dump出来,通过IDA查看确认了一下,应该没错了。

4.png

分析算法

开始分析算法,通过OD调试确认,前面一部分都是输入输出相关代码,直接跳过。

直到看到下面几个特征,明显看出是hash算法相关特征了,一番搜索之后确认之后是sha1

5.png

调试结果和py计算结果一致,将输入的uid通过sha1算法得到一个hash值。

6.png

看到这个特别的返回值方式,以及字符串中这种xxx.go的字符,我才意识到这是一个go语言写的程序。

7.png

继续检查输入的口令长度,小于0x10则输出"口令解码失败"。

输入长于0x10的口令之后,重新开始,然后看下一个函数。看到这个ABCD...+/特征,很明显就是base64编码,第一个反应是把口令编码。

8.png

结果发现并不是我想的那样,结果如下。

9.png

看到输出"口令解码失败"意识到这可能是base64解码函数,生成一个base64编码字符输入尝试一下。

10.png
>>> base64.b64encode('1234567890')
'MTIzNDU2Nzg5MA=='

果然,调试中看到解码正确。

11.png

继续往下走,到48BC80,输入刚才解码的口令以及uidhash,先直接F8跳过。

12.png

程序异常提示出一些信息,可以看出这个在AesDecrypt的时候出错。

13.png

所以意识到48BC80AES解密算法。那么输入的口令结构应该是这样的才能解密成功。

输入口令=Base64Encode(AesCrypt(口令,sha1(uid)))

找了一段aes加密的python代码,构造一个口令,如下:

python aes.py
kJgRdtADqzjDKXiHHr770g== 11111111

在口令出输入kJgRdtADqzjDKXiHHr770g==之后,再次尝试,果然解密成功。

14.png

继续往下,看到判断解密的口令长度是不是0x1A,如果不是则错误。

15.png

所以加密前口令长度应该0x1A,先修改标志让OD正常继续执行,到402000,三个参数,解密后口令,HappyNewYearFrom52PoJie.CnLine Islands Standa,以及口令长度,很明显是一个字符串比较函数。

16.png

结合长度限制0x1A,那么口令应该是HappyNewYearFrom52PoJie.Cn,用python加密后输入尝试一下。

python aes.py
9D7boJcaCbENFCpf6YRBmJFZjPsPyUot8sHdR5YTChw= HappyNewYearFrom52PoJie.Cn

果然成功。

17.png

彩蛋

最后已经完成了,我用IDA打开了原始程序看一看,没想到看到了这个。

18.png

IDA完全支持go语言IDL符号解析,然后最开始PEID查的啥壳啊,完全是忽悠人的。

所以如果刚开我就用IDA来分析这个代码,是不是更快呢!

第一次分析go的坑,以后会长记性了。

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

推荐阅读更多精彩内容