当前位置:首页 » 《我的小黑屋》 » 正文

2021 SangFor(羊城杯)-Reverse(逆向) Ez_Android Write up_水番正文的博客

27 人参与  2021年12月23日 12:17  分类 : 《我的小黑屋》  评论

点击全文阅读


0x00 日常查壳?

安卓逆向,我用JADX

0x01 值得注意的文件

只有在这里文件里所注册的活动页 才会被手机用户观察

0x02 分析主函数

于是直接分析MainActivity

关于这些R.string.xxx都一般存储在

strings.xml存储字符串

然后现在简单分析一下:

1. 经过用户名和密码的检查

2. 密码有段加密然后 - 1的操作

比赛的时候是连vpn登陆 当时用到就是靠这个登陆

然后在资源文件里找

借鉴一下别人脚本

a = 'c232666f1410b3f5010dc51cec341f58'
for i in range(0,len(a),2):
    f = a[i] + a[i+1]       #加前后两个数
    f = int(f,16) + 1       #转成十进制+1
    print("%02x"%f,end="")  #打印成16进制 打印两位 不够补0

然后解密一下获得密码

登录就送码表

0x03 分析程序流

当上面所有验证通过之后跳转到getKeyAndRedirect

这边的会开始CheckFlagActivity的操作 安卓正向开发经验不足 不过大概可以先猜key就是返回来的那串字符

跳转到这之后简单看一下发现比较flag的地方

经过EncodeUtils后和encodeFlag比较

进去一看发现又是base加密,这时候key也可以确实就是打乱的码表(没有重复的字符长度64位)

0x04 GetFlag!

解密脚本

#include <stdio.h>
#include <string.h>

int main(void)
{
	unsigned char key[] = "3lkHi9iZNK87qw0p6U391t92qlC5rwn5iFqyMFDl1t92qUnL6FQjqln76l-P";
	char data[] = {"TGtUnkaJD0frq61uCQYw3-FxMiRvNOB/EWjgVcpKSzbs8yHZ257X9LldIeh4APom" };
	int i, j;
	unsigned int v3;
	int flag[100] = {0};
	
//	printf("\n");
	for(i = 0; i < 60; i++)	
		for(j = 0; j < 64; j++)
			if(key[i] == data[j])
				{
					key[i] = j;					 
//					printf("%d:%d ",i,j);
					break;
				}
	for(i = 0, j = 0; i < 60; i += 4, j += 3)
	{
		v3 = key[i+3] + (key[i+2] << 6) + (key[i+1] << 12) + (key[i] << 18);
		flag[j] = (v3 >> 16) & 0xFF;
		flag[j+1] = (v3 >> 8) & 0xFF;
		flag[j+2] = v3 & 0xFF;
	}
	
	for(i = 0; i < 100; i++)
		printf("%c",flag[i]); 
	
	return 0;	
} 	

解密脚本详情见

Buuctf-Reverse FlareOn3-Challenge Write up_水番正文的博客-CSDN博客

GetFlag!


点击全文阅读


本文链接:http://zhangshiyu.com/post/32008.html

解密  码表  分析  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1