吐槽一下:这几天忙,没注意时间,居然错过了第一题。。。
先看下程序语言
随便输入点什么,查看报错内容
拖进IDA,居然被挑衅了
果然字符串没发现什么有用信息,根据数据结构的题目,这是一个AVTrieTree只分析过平衡二叉树,对这个树并不太了解
AVTrieTree
以下代码均为配合OD调试整理
程序主函数
很多赋值操作
初始化操作
TrieTree核心比较函数
老薛语录:观察数据变化,注重大局,不拘小节
新建节点由代码可知,并未进行初始化,直接在0x20*4的位置保存当前节点字符串长度,中间会有很多无效数据,给后面分析造成很大不便,这里我们手动初始化置0,下面显示红色部分字节,大部分为手动置0;ecx传参,可知节点是一个类或结构体新建节点
插入节点push 子节点,ecx传入this指针this指针指向位置第一个字段为vftable虚函数表,第二个字段为根节点,指向位置大小为0x110添加节点后数据变化
vftable
TrieTree比较节点插入完毕,根据代码可得知对树作比较内存中可以看到根节点下只有两个子节点跟踪节点,可以遍历到这几个字符kx,c,7,M,k,t,9,f结构如下到这基本差不多猜出了密码8个节点,组合成这几个单词kx,c7,c7m,c7mk,ct,ctf,ct9好像少了一个单词?这里还有一个小坑有一个单词是重复的通过单步跟踪找到M原来M使用了2次两个树比较相同后,进入下一个比较函数,检查字符串顺序Bingo!
kx
c
7
M
k
t
9
f
c7
c7m
c7mk
ct
ctf
ct9
经过以上分析,可得知本程序中TrieTree内存结构
TrieTree节点关于子节点数量0x20,可能存在多数组情况,静待各位大佬解析
0x20
TrieTree参考资料数据结构之Trie树6天通吃树结构—— 第五天 Trie树Trie树(字典树)_实现模糊查找(支持中文)Trie树的数组实现原理
对TrieTree不熟悉,到节点比较位置就卡住了,分析了一下午,没什么成果,搜索了一些相关资料,参考demo,才顺利搞定!
两个小坑1.输入的密码生成的树是局部变量,在堆栈中,并且没有初始化,垃圾数据较多,给分析造成很大不便2.节点的最后一个字段是以当前字符为结尾的单词数,这个容易被忽略
收获又多熟悉了一种数据结构
感谢15PB各位老师的辛勤教导~感谢看雪各位大佬的无私分享~
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。
holing 不知道Trie但是还是逆出来了,这个我佩服-----------------------------------------------------------好吧还是参考了资料的(当我没说不知道这题 ...
HeyLXF Orz。大佬能不能放源码呢