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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 8095|回复: 98
上一主题 下一主题

[CTF] xctf战疫大赛re-天津垓解法

  [复制链接]
跳转到指定楼层
楼主
Dyingchen 发表于 2020-3-10 23:10 回帖奖励
本帖最后由 Dyingchen 于 2020-3-11 12:04 编辑

xctf战疫大赛re-天津垓解法
这次比赛在攻防世界平台上面举办,有兴趣的可以自己去看看,真的是神仙打架,而我这种萌新只能瑟瑟发抖,闲话不多说进入正题



下载题目文件习惯性查一下程序信息:


得到程序是一个无壳64位的控制台程序,还附带了一个dll

那么直接先用IDA载入分析,同时打开x64dbg分析程序,然后接下来程序一闪就消失了我立马反应过来程序有反调试,应该是检测到了IDA所以闪退了,因为我电脑上面的x64dbg是有sharpod插件的所以不应该是x64dbg的问题。


所以我关掉IDA直接用x64dbg分析,来到程序载入跑起来的界面


显然这里需要一个授权的字符串,直接到x64dbg里面搜索字符串定位到获取输入的点


在搜索字符串的时候能够看到一堆检测的代码,把退出跳转全部给nop掉,这样就不会妨碍分析了



发现下面有两个函数,都给下上断点,随便输入一个字符串进行测试一下发现断不下来于是跟进到4011f6函数里面分析



发现了获取输入的call,下断,成功断下但是发现字符串长度不够(0x12)程序马上就要退出了,于是修改汇编使其跑到真假码对比的地方


紧接着发现程序在进行循环对比,结合上面有大量的赋值mov语句可以判定应该是在进行某种加密,于是重新打开IDA分析得到如下逻辑



根据要求需要满足v43 = ~(j & b[i%14]) & (j | b[i%14]),并且v43和数组v1的值相等

这里看起来一头雾水,因为之前去掉了反调试所以现在直接用IDA对程序进行动态调试(注意用自带调试器调试时路径里面不能有中文否则IDA报错)
在内存中可以看到v39的字符串被替换成了一个字符串而不是之前的数据
现在可以直接把IDA反编译出来的逻辑复制过来使用,写一个脚本进行爆破
其中:v39为上图的字符串str是我们输入进去的字符串,v43是对比的数据

[C++] 纯文本查看 复制代码
#include <iostream>
using namespace std;
int main() 
{
	long long int a[18]={17,8,6,10,15,20,42,59,47,3,47,4,16,72,62,0,7,16};
	long long int b[14]={0x52,0x69,0x73,0x69,0x6E,0x67,0x5F,0x48,0x6F,0x70,0x70,0x65,0x72,0x21};
	long long int find=0;
	
	int i=0;
	int j=0;
while(i!=18)
{
    j=0;
	while(j!=255)
	{
		find = ~(j & b[i%14]) & (j | b[i%14]);
		if(find==a[i])
		{
			
			cout<<(char)j;
			break;
		}
		
		
		j++;
	}
	i++;
}
	
	
return 0; 
}


得到授权字符串为Caucasus@s_ability

于是输入字符串进入下一步


然后程序要求你找到flag,但是从这里开始程序就没法搜索到任何可以定位的字符串了于是我找到程序的退出点进行堆栈回溯



然后定位到关键点


找到这个函数头的地址:10040164d 然后去IDA分析




然后发现IDA反编译出来的代码是这样的



初看我还以为代码被v了然后我在IDA里面找到了一个解码的函数



然后我突然发现之前定位关键点的时候在x64dbg里面程序是正常的说明程序在跑到校检的地方的时候这些字节码会被还原成原来的代码所以进行动态调试

输入之前得到的授权字符串:Caucasus@s_ability

然后按g跳转到10040164d


此时的代码应该被还原了所以按c转换成汇编代码,右键新建函数

然后按F5反编译成伪代码

得到如下结果



终于得到逻辑了,然后根据逻辑我们发现这是一段运算大概逻辑是

校对码的每一位 =   19683*输进去的字符串每一位%(-2147483637)

中间有些数据IDA有时候会反编译成&unk_D83E7这种类型的地址,

此时需要等到程序运行过赋值之后鼠标移动上去就可以发现是一个64位的数据

解决了一堆问题之后

现在我们终于可以写脚本了

[C++] 纯文本查看 复制代码
#include <iostream>
using namespace std;
int main() 
{
        long long int a[52]={2007666,2125764,1909251,2027349,2421009,1653372,2047032,2184813,2302911,2263545,1909251,2165130,1968300,2243862,2066715,2322594,1987983,2243862,1869885,2066715,2263545,1869885,964467,944784,944784,944784,728271,1869885,2263545,2283228,2243862,2184813,2165130,2027349,1987983,2243862,1869885,2283228,2047032,1909251,2165130,1869885,2401326,1987983,2243862,2184813,0xD83E7,2184813,2165130,1987983,2460375};//这些我们输入进去字符串之后经过变换之后需要对比的数据
        long long int find=0;
        int is_find=0;
        int i=0;
        
while(i!=52)
{

        while(is_find==0)
        {
                if((19683*find)%(-2147483637)==a[i])
                {
                        cout<<(char)find;
                        i++;
                        find=0;
                        is_find=0;
                        break;
                }
                find++;
                
        }
        
}
        
        
return 0; 
}


最后得到flag

flag{Thousandriver_is_1000%_stronger_than_zero-one}


最后再附上原题


天津垓.7z

856.57 KB, 下载次数: 33, 下载积分: 吾爱币 -1 CB

原题

免费评分

参与人数 53吾爱币 +50 热心值 +45 收起 理由
bitpeach + 1 + 1 用心讨论,共获提升!
lpt05150 + 1 + 1 用心讨论,共获提升!
DearDavies + 1 + 1 过程很清楚 思路也清晰 棒!
kilkilo502 + 1 + 1 IDA分析很厉害啊!这程序估计可以爆破。作者的逆向算法玩的镇流!表示拜膜.
Jerry_bean + 1 + 1 鼓励转贴优秀软件安全工具和文档!
魅夜 + 1 + 1 用心讨论,共获提升!
肆零柒柒 + 1 谢谢@Thanks!
往復不息 + 1 + 1 我很赞同!
回荡 + 1 + 1 热心回复!
此用户无法显示 + 1 + 1 我很赞同!
QJ520 + 1 + 1 热心回复!
Denny + 1 我很赞同!
dabenlong + 1 + 1 用心讨论,共获提升!
忘今今 + 1 + 1 热心回复!
寻Nina的红狼 + 1 + 1 用心讨论,共获提升!
shuiyu + 1 + 1 热心回复!
梦天DreamSky + 1 + 1 谢谢@Thanks!
wjsjwr + 1 热心回复!
干烧鱼蛋炒饭 + 1 + 1 我很赞同!
月六点年一倍 + 1 鼓励转贴优秀软件安全工具和文档!
soulwaiting + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
weigaojing + 1 + 1 谢谢@Thanks!
HG/飞飞 + 1 + 1 用心讨论,共获提升!
不谙世事的骚年 + 1 + 1 我很赞同!
Cizel + 1 + 1 我很赞同!
wjp187 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
不怕黑的夜晚 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
gaosld + 1 + 1 用心讨论,共获提升!
MFC + 1 + 1 谢谢@Thanks!
薛花樊凯 + 1 + 1 用心讨论,共获提升!
waterxx + 1 + 1 我很赞同!
轻冬云 + 1 + 1 用心讨论,共获提升!
yixi + 1 + 1 谢谢@Thanks!
Wwwhunter + 1 + 1 用心讨论,共获提升!
Rclear + 1 + 1 膜拜,大一萌新只能看着这波操作行云流水666
unexus + 1 + 1 谢谢@Thanks!
当我入梦 + 1 + 1 用心讨论,共获提升!
wisoft + 1 谢谢@Thanks!
town_l + 1 热心回复!
CHINAWSF + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
SinnerDusk + 1 + 1 用心讨论,共获提升!
kswzy + 1 + 1 热心回复!
thinkpad_420 + 1 + 1 这种神操作,对于刚入门的我,真是望尘莫及呀
WYCKSY + 1 我很赞同!
wataxi + 1 用心讨论,共获提升!
zooah212 + 1 + 1 很厉害!!!
Id!0tNe + 1 热心回复!
XhyEax + 1 + 1 热心回复!
smile5 + 1 热心回复!
朱朱你堕落了 + 1 + 1 用心讨论,共获提升!
来自天堂的问候 + 1 + 1 谢谢@Thanks!
jamescookers988 + 1 + 1 谢谢@Thanks!

查看全部评分

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

推荐
15553506162 发表于 2020-3-17 14:56
楼主想问一下  第一个算授权码的时候  那个j!=255咋来的啊
我看网上最后一步算出flag的脚本里面也有255
Number=[2007666,2125764,1909251,2027349,2421009,1653372,2047032,2184813,2302911,2263545,1909251,2165130,1968300,2243862,2066715,2322594,1987983,2243862,1869885,2066715,2263545,1869885,964467,944784,944784,944784,728271,1869885,2263545,2283228,2243862,2184813,2165130,2027349,1987983,2243862,1869885,2283228,2047032,1909251,2165130,1869885,2401326,1987983,2243862,2184813,0xD83E7,2184813,2165130,1987983,2460375]
for i in range(0x33):
        for n in range(255):
            if Number[i] == 19683 * n % 0x8000000B:
                Result.append(chr(n))
                break
print Result
一直搞不明白这个255是从哪里分析来的
推荐
 楼主| Dyingchen 发表于 2020-3-12 20:00 <
JANlittle 发表于 2020-3-12 18:32
当时做这题的时候没插件,然后这程序坑爹的地方在于有两个反调试的函数,我就用IDA跳了一个,但另一个当时 ...

动态调试打ctf是比较难练,我以前搞过破解才有现在的水平,只能说多刷题 见得多了自然水到渠成,比如这次比赛里面的那道cycle graph就比较考你汇编,那段循环对比IDA反编译出来的东西我就看不太懂不过通过汇编分析发现只需要盯着eax和esi就能得到flag了
沙发
我爱你H大 发表于 2020-3-10 23:38
3#
mojie666 发表于 2020-3-11 00:23
感谢分享,思路非常清晰~
4#
dagang 发表于 2020-3-11 00:49
很给力,吾爱论坛有你更精彩
5#
netspirit 发表于 2020-3-11 06:45
厉害啊。。。。。
6#
来自天堂的问候 发表于 2020-3-11 07:53
感谢分享,这种比赛不错呀,挺好玩的
7#
RZJ-YQJY 发表于 2020-3-11 08:39
这种比赛不错呀,挺好玩的
8#
辰星PsychoPrior 发表于 2020-3-11 08:41
谢谢楼主了,感觉复现一下。
9#
冰神盖聂 发表于 2020-3-11 09:07
厉害。。。。。。。。。。。。
10#
longggggg_2000 发表于 2020-3-11 09:18
厉害啊。。。。。学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

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

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

GMT+8, 2020-4-10 19:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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