tt x-gorgon算了不写了okay,现在重回正题,该样本app版本为4063,具体的unidbg补环境比较简单,就不提了,定位参数生成位置和寻找入参可以参考果冻爽大佬的文章https://bbs.kanxue.com/thread-285623.htm。由于加密会用到时间戳,所以先把时间戳给固定了,保持多次踹死结果一致 开始前先踹死一份日志,后续主要根据日志+unidbg hook+ida进行分析,trace的时候可以顺便把memcpy也给hook上,这样方便后续分析 这是unidbg跑出来的结果,其中的x-gorgon是要分析的内容,大小为26字节使用010editor打开trace日志,随便搜一下结果中的前几个字符串 直接就搜到了,hook memcpy的好处也体现出来了。直接向上搜这个地址 可以看到,是在这个地方写入的0x38来源于上面的0x12618ac0这个地址,继续向上找这个str(.*?)0x12618ac0 直接用正则表达式搜索会快一点 找到了,是在这个地方继续向上跟,这里就不带着跟了,只给出找到的相关trace日志这是跟0x38所有的相关日志,最上面是g结果中的第一个字节,第一个字节提取高位之后从0x12189f35+0x8提取出了0x38,0x12189f35再向上找就找不到了,考虑是ida中的常量区,打开ida跳转过去 0x12189f35+0x8 的位置不就是8吗,这根0x38有什么关系,有的兄弟有的,0x38是8的16进制的形式,在继续观察0x38 0x34 0x30 0x34....之后发现这一步其实是将结果中84...高、低四位转换为16进制形式表示,所以结果在上面就已经生成了,需要继续向上看0x1261ade0这是0x84的地址,继续跟踪该地址向上看,还是之前的搜索方式 不仅搜索到了0x84,前四个字节都搜索到了(而且在这里可以知道这26字节的结果所处的地址为0x1261ade0+26)一个一个看0x84 去看ida中的汇编代码,会发现这里是移动0x84这个固定值进去的,那这个就不用再管了,继续看0x04 同样的,也是一个固定值0xe0这个在ida中看不出来什么,再加上有混淆,不如继续去看trace日志下面是踹死到的相关日志,跟踪方式与上面类似,这里不再重复再向上找就再也找不到了,下面的0xad也是类似,但是看上面的trace日志可以发现它俩来自于某个地址的后两个字节,经过多次踹死后确定如此,我就直接将其固定写死了,这两个字节后面会作为key的一部分被使用到,注意要保持前后一致这是前四个字节的来源,继续看后面的后面的0000经过多次验证发现也是固定的,就不看了现在就只剩下后20个字节了。 先看后面的0x90还是之前的搜索方式 str(.*?)0x1261ade简略分析后可以得出0x90是通过下面这些日志产生的这是其对应ida反编译后加上ai补充的注释,这段代码是在v54进行一些操作其中会使用到的变量为v67、v53,所以现在就很明确了,v54、v67、v53是需要逆向分析的目标,先去看看日志中分别对应的都是什么吧,将鼠标光标放到v54[v67]上后点击tab键 发现其对应这一条日志,接着去踹死日志中搜索09a5e4这个地址 发现v67只是一个计数器、循环变量(0,1,2....),0x1261ade6~0x1261ade6+20是我们要分析的v54的地址按照上述方式再看一眼v53 会发现之前固定的0xfff...eb就是v53,那就很清晰了,要分析的只有v54了按照上述方式继续搜索0xde,下面是所有的相关来源 到ida中去查看该地址,其对应的就是这句伪c代码,再结合上面踹死到的日志不难发现这是在做result[i]=v54[i]^v54[i+1] ,所以要继续向上找这个v54先跟到的是这里,去ida里看一眼伪c代码就知道是在做什么了相当于是v54[i]单字节中的高四位和第四位置换位置,说白了就是2和9交换位置,所以在每次进行result[i]=v54[i]^v54[i+1] 操作前,会先对v54[i]进行一个小的置换,继续向上去跟v54的来源,最终是在这里生成的上面是ida中伪c代码结合ai注释后的代码块,ai已经帮我们分析好了,可以知道要继续跟踪的只有v78、v54了一个一个看先看v78吧,这个"Sbox"的来源 其对应的地址为0xe4ffda40...,我们之前都是在日志中去进行的跟踪,这次用一下unidbg的tracewrite 可以看到,基本都是在是在0x99be8这个地方写入的,跳转到ida中去看一下这是ida中反编译出的伪c代码,和rc4类似,其中v78为Sbox、v87为key,分析一下之后发现v78会被初始化为0~255,正常的rc4初始化表,v87key其中除了有两个字节会变之外,其他都是固定的,这两个变化的字节跟gorgon加密结果中的第三和第四个字节是相同的,之前也提到过这个。现在先稍微总结一下,v54为加密数据,根据v87key对v78Sbox进行初始化,之后再通过v78 Sbox对v54进行加密,最后在v54内部做一些运算,这相当于就是一个变种的rc4了(里面具体的运算步骤有些改变)。所以现在只剩下加密入参v54的来源需要分析了,继续看v54吧,加密数据的来源v54一共20字节,分别为98fd959500000000000000002000020568749f72 这里我们还是去tracewrite看,tracewite和在日志内追踪效果是一致的 。。。打脸了,什么都没trace到,那说明什么了,说明他可能是是memcpy地址拷贝过来的,在日志中搜索一下,再次打脸。。。又是什么相关信息都没有,尝试在日志中搜索一下9595fd98 终于找到了跳转到ida中后会发现好家伙,这不是md5吗,先看看是不是标准的md5吧,在unidbg中对sub_180F44下断点,找入参去验证一下是不是标准md5 怀疑是对这段截取的uri进行的md5,到在线网站上去做一下验证 okay,结果的前四字节跟之前去找的一模一样,那就是这个了98fd959500000000000000002000020568749f72再后面的20000205适合版本有关,这个就不管了,可以直接固定住再看一下最后的68749f72直接在踹死的日志中搜 继续搜索68749f72 最前面的是在这里,再向上就没有相关逻辑了,怀疑是0x02d49c这里生成的,在ida中查看 发现这里其实是gettimeofday获取当前时间的,现在的时间戳不都应该175开头吗,为什么这里是0x68开头的呢,因为这是16进制,拿到计算其中转换一下就明白了 好了,确实没有错,那v54就确定了。v54确定了,这篇文章的主体内容也就到此结束了。剩下的就只是去复现加密过程中的运算逻辑了,这里就不提了。有问题的或者想要交流技术的都可以加贴主vx mwzzzh(记得备注一下看雪)X-Argus
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-287614.htm
[原创]tt x-gorgon分析
314 浏览
14 回复
学习学习
支持支持
感谢大佬分享
感谢分享
感谢分享
学习
感谢分享
最后于 2025-7-20 18:53
被nonovo编辑
,原因:
被nonovo编辑
,原因:
tai 6le
666 感谢分享
666666 感谢分享
感谢分享
看看吧
瞅一眼