吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5686|回复: 1
收起左侧

[会员申请] 申请会员ID:SuperGate

[复制链接]
吾爱游客  发表于 2019-5-6 00:30
1、申 请 I D:LCG
2、个人邮箱:Service@52pojie.cn
3、原创技术文章:全国信息安全大赛 2019初赛Reverse方向  bbvvmm WriteUp


bbvvmm WriteUp
分析主要流程。发现题目要求我们输入username以及passwd,正确之后执行cat flag。
main流程如下: 1.PNG

2.PNG 点进sub_405B25函数,发现 3.PNG
大概是在a1处疯狂赋值,大概的格式是一个常数值,一个函数的地址。猜测是vm类型加密。然后在0x6092xx处开辟内存空间并且初始化。所以在后续分析虚拟机的时候要重点关注这几个地方。
接着读入6个字符当作密码。然后sub_406607函数则是对passwd的加密,这个具体后面分析,接着往下看。
sub_4066C0函数是对输入密码的简单加密。大概就是将passwd的ascii码的高低4位分开,然后分别当作低4位,高四位用3填充之后赋值给a[2i],a[2i+1]。这个可以笔算。
后面的函数比较复杂……开始光看流程很晕。还好后来看到提示是国密SM4。v17~v32存的是key,最终算算出来的结果根据后面的strcmp参数可以看出来是经过base64加密的,不过base64是变了表的,得找轮子解密。其中新的表在sub_400AA6中可以找到。
所以我们从RVYtG85NQ9OPHU4uQ8AuFM+MHVVrFMJMR8FuF8WJQ8Y=,用base64解密得到EF468DBAF985B2509C9E200CF3525AB6,然后把这个字符串国密解密得到36 32 36 31 36 34 37 32 36 35 37 32 33 31 33 32 ,两个字节一组,依照上述方法解密并转化,得到username:badrer12接下来讨论passwd部分
根据以上分析,passwd是被虚拟机加密了的。所以我开始尝试能否dump出虚拟机的操作码,然后手写脚本跑出来汇编然后分析。但是后来发现虚拟机的各个重要寄存器分析不过来,而且由于涉及到的地址比较多,分析起来很混乱。所以最后采用“猜”密码的方式解决。操作如下:
进入sub_406607函数 捕4.PNG
(a1+56)存放的是虚拟机eip的地址。当eip==0xff的时候虚拟机停止操作。
进入sub_40656D函数 5.PNG
其中eip指向的地址为下图的数据块 6.PNG
a1地址指向的内存为下图的数据块(部分): 7.PNG
Sub_40656D函数流程大致为:i循环枚举上图中最左边一列,然后和eip进行比较,相等了则执行相应函数。相应函数在上图的右边8个字节。
分析后面的判断语句 8.PNG
需要*(ptr+25)的值为0,那么我们随便输入一组密码zbcdef,找到ptr+25相应位置 9.PNG
如图所示,黑圈内的是输入的passwd,红圈内的存的东西则是*(ptr+25)的值(在虚拟机过程中会随运算进行改变),蓝圈内的则是虚拟机计数器,表示当前讨论到了第几位密码位。
那么这个位置的值有什么变化规律呢?我们先大概看一下虚拟机的运行函数 10.PNG
这是一个函数内的变量变化情况,在其他函数中也能找到qword_609240进行了+4或者-4的操作。因此我们有理由猜测该地址为虚拟栈顶,我们因此可以追溯到栈的位置。输入密码为abcdef时,虚拟栈在运行一段时间之后如下所示 11.PNG
容易看到出现了61,62,63,64,这正是我们输入的abcd的ascii码,可以猜测这里对密码位进行了操作。并且在后续跟进中可以发现,最右列应该是分别对应了相应的密码位的加密,并且最右列的和刚好和虚拟机进程完成之后的*(ptr+25)的值相等!
所以我们现在的任务是找出每一位相应的字符,使得算出来的最右一列等于0,这样相加之后才能等于0,passwd才能正确。
那么78 79 7A 7B和19 1b 19 1f又有什么含义呢?我们尝试将密码输入改为bbcdef 12.PNG
发现变的只是最右边一列(最左边是地址,所以不管)。除了第一个密码位对应的19变为了1a,没有其他变化。而a->b ascii码增量为1,正好对应了19->1a的增量!
为了验证猜测,我们用zbcdef密码来测试 13.PNG
答案很依旧,仍然是第一行最右列发生了改变,不过没有像我们预期的变得比19,1a大。不过没关系,因为我们用ybcdef测试之后发现最右一位刚好等于01了。说明a-z是和19-02分别对应的。因此为了使第一位为0,我们将第一位设置为x,发现确实如我们所愿。
因此。我们分别测试第二位,第三位……的映射关系,发现最终密码应该为xyz{|}。至此,问题得到了解答

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2019-5-6 14:51
复制都不改信息?名字邮箱是你的吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 01:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表