吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19409|回复: 107
收起左侧

[Android CTF] 攻防世界Mobile-黑客精神解题思路分享

    [复制链接]
顶风能尿三丈远 发表于 2020-12-31 09:24
image1.png
下载附件,使用JEB加载apk,首先看一下Mainfest配置
image2.png
大致有个初步印象,这个apk有两个Activity,一个是MainActivity 主入口,另一个是 RegActivity,应该是从主入口某个按钮拉起。

我们先分析 MainActivity 入口初始化函数 OnCreate
image3.png
这里重点在于 会先判断 MyAPP.m 的变量值,是否为0,如果为0 ,就说明没有注册,会进入到注册环节,调用 doRegister, 如果m为1,说明已经注册过了,直接进入work环节。
m的取值就是本题的解题关键了,我们来看一下m在哪里被定义,已经在哪里被调用的。
image4.png
根据MyApp类的定义,m为静态变量,MyAPP在 onCreate函数里进行初始化动作,可能会影响到变量m的值。

这里调用了native 函数 initSN()。后续我们会在libmyjni.so文件中进行深入分析。

在回到我们刚刚的主入口MainActivity ,我们还需要分析一下 doRegister函数和 work函数的逻辑

先来看 doRegister 函数,其实就是按钮注册点击事件,拉起注册页面。
image5.png

在注册页面中,有个输入框和一个按钮,给按钮添加点击事件,将用户的输入sn,作为saveSN函数的入参,进行处理。
具体如何处理用户输入的sn,就需要进一步的分析 saveSN函数,这个saveSN函数也属于native层函数,待会也一并分析。
image6.png
再看MainActivity中的work函数,当m=1时,会进入到work分支,它的逻辑也是在native层。接下来我们就需要分析so文件了


IDA加载 libmyjni.so文件
JNI_Onload 入口可以看到进行了动态函数注册。
image7.png

我们可以看到 initSN函数实际上就是n1, saveSN函数实际上就是n2, work函数实际上就是n3
image8.png

为了方便分析,我们将n1,n2,n3 分别换个变量名

n1 -> realinitsn
n2 -> realsavesn
n3 -> realwork

image9.png

首先分析一下 initsn函数
image10.png
这个函数非常的简单,就是将/sdcard/reg.dat文件中的内容取出来,和EoPAoY62@ElRD 进行对比。如果相同 v10=1 ,如果不同v10=0 。
注意这里的setValue函数,其实就是对变量m进行赋值操作的
image11.png

现在再来看native函数 savesn
image12.png
这个saveSN函数逻辑也很清晰,用户输入的字符sn,会进行字符计算操作,得到了新的字符串,再保存到 /sdcard/reg.dat 文件中。


至此,我们已经非常清晰知道了整个应用的逻辑。
第一次用户打开apk时,会进行注册,用户输入的注册字符,会经过字符计算操作, 然后存入到/sdcard/reg.dat文件中。以后用户再次打开app时,会对m值进行判断,就是通过对比/sdcard/reg.dat文件内容和
EoPAoY62@ElRD 是否相同。

那么我们的任务就根据字符串常量 EoPAoY62@ElRD 来反推出用户的输入字符。


我们依旧使用frida来进行解题。先测试一下我们的输入,输出
image13.png
从这个输入输出的结果来看,我们总结了一个规律:
1、输入的字符个数和输出字符个数是 一一对应的。
2、将三个输入字符分为一组,对应一个输出字符。

我们可以利用frida快速的爆破出所有的字符,不需要去研究saveSN函数里的字符加密操作。不过此道题saveSN里的字符加密操作比较简单,很容易逆推出来。如果对于很复杂的加密算法,我们的爆破方法会非常简单。
image14.png
20秒内就可以爆破出第一个三字符元组,  输入201 -> 输出 EoP

image15.png
第二个元组  输入 608 -> AoY

image16.png
第三个元组 输入Am! ->62@

image17.png
第四个元组  输入233 -> ElR

image18.png
第五个元组 输入3 -> D

最终的flag为 201608Am!2333

注册时输入 201608Am!2333 ,弹出提示框,给出flag的格式提示,也就是work函数的内容,我们不需要深究了。

image19.png

image20.png

frida hook 代码
[JavaScript] 纯文本查看 复制代码
var flag = false;
    	
    	
    	imports = Module.enumerateImportsSync("libmyjni.so");
      	 for(var i=0;i<imports.length;i++){
      		 
      		console.log(imports[i].name);
      		 if(imports[i].name =="fputs")
      		 {
      			console.log(imports[i].name);
      			console.log(imports[i].address);
      			targetfunc = imports[i].address;
      			break;
      		 }
      	  

      	 }
      	 
      	 
      	if(targetfunc != undefined)
	   	 {
	   	 Interceptor.attach(targetfunc,{
	   		onEnter: function(args){
	   			//console.log("strlen enter!");
	   			

	   				var data = Memory.readCString(args[0]);
	   				//console.log(data);
	   				if(data == "D")
	   					{
	   					flag = true;
	   					console.log("[+]Found: "+Memory.readUtf8String(args[0]));
	   					
	   					}
	   		
		   			
		   	}
		   		 
		   });
	   	 }
      	 
      	 
      	 
    	
    	
    	console.log("[*] hook android.os.Process");
        var Process = Java.use("android.os.Process");
        Process.killProcess.implementation = function () {
        	console.log("[*]get in android.os.Process killProcess");
        	
          
            
        };
        
        
        
        var dict = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()";
        
        var result = "EoPAoY62@ElRD";
        
        
        var plaint = "";
        
        
        console.log("[*] hook com.gdufs.xman.MyApp")
        
        var MyApp = Java.use("com.gdufs.xman.MyApp");
        var myapp = MyApp.$new()
        
        
        /*
        console.log("input: 11");
        myapp.saveSN("11");
        
        console.log("input: 111");
        myapp.saveSN("111");
        
        console.log("input: 1111");
        myapp.saveSN("1111");
        
        console.log("input: 11111");
        myapp.saveSN("11111");
        
        console.log("input: 111111");
        myapp.saveSN("111111");
        
        console.log("input: 111111111");
        myapp.saveSN("111111111");
        */
        
        
        /*
        for(var k =0; k <dict.length; k++)
					{
						
						myapp.saveSN(dict[k]);
						if(flag)
						{
						console.log("[+]Found dict : "+dict[k]);
						return;
						}
						
    
					}
					*/
        
        
        
        for(var j =0; j <dict.length; j++)
		{
		for(var i =0; i <dict.length; i++)
			{
				for(var k =0; k <dict.length; k++)
					{
						
						myapp.saveSN(dict[j]+dict[i]+dict[k]);
						if(flag)
						{
						console.log("[+]Found dict : "+dict[j]+dict[i]+dict[k]);
						return;
						}
						
    
					}
					
			}
		}
        





免费评分

参与人数 65吾爱币 +54 热心值 +63 收起 理由
liuchuanfeng + 1 + 1 谢谢@Thanks!
白云点缀的蓝 + 1 + 1 谢谢@Thanks!
a1289255375 + 1 + 1 谢谢@Thanks!
24k纯金滑稽 + 1 + 1 用心讨论,共获提升!
peterzzx + 1 + 1 我很赞同!
SatanWall + 1 我很赞同!
林羊丰 + 1 我很赞同!
xingshizhuyi + 1 我很赞同!
Rabona + 1 我很赞同!
dadake + 1 + 1 我很赞同!
haoweixl + 1 + 1 我很赞同!
我是大力呀 + 1 + 1 谢谢@Thanks!
wecat + 1 用心讨论,共获提升!
泛D.摩苍 + 1 + 1 用心讨论,共获提升!
Kennifer + 1 + 1 用心讨论,共获提升!
tocabd + 1 + 1 谢谢@Thanks!
Chenda1 + 1 + 1 用心讨论,共获提升!
onething + 1 热心回复!
520131415926lfc + 1 + 1 热心回复!
man2924981 + 1 + 1 我很赞同!
绝地飞鸿 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
0-n-3 + 1 + 1 谢谢@Thanks!
L.7_129 + 1 + 1 热心回复!
LJJ001 + 1 + 1 热心回复!
qhfwebjnds + 1 + 1 我很赞同!
sym945 + 1 + 1 热心回复!
净网行动 + 1 + 1 我很赞同!
Kael_A + 1 + 1 我很赞同!
漠漠 + 1 + 1 我很赞同!
Bluesky10 + 1 + 1 我很赞同!
Gikl2 + 1 + 1 我很赞同!
s785093878 + 1 + 1 我很赞同!
Daihui + 1 + 1 热心回复!
听风没有雨 + 1 我很赞同!
5ud0 + 1 + 1 我很赞同!
心语科技 + 1 + 1 用心讨论,共获提升!
wawyw + 1 谢谢@Thanks!
黑默丁格 + 1 + 1 用心讨论,共获提升!
大喵 + 1 + 1 热心回复!
huqi0010 + 1 + 1 我很赞同!
微草 + 1 + 1 热心回复!
我不讲武德 + 1 + 1 我很赞同!
hxtlcc + 1 我很赞同!
xiayilm + 1 + 1 我很赞同!
azcolf + 1 + 1 用心讨论,共获提升!
xiong_online + 1 + 1 用心讨论,共获提升!
kelvar + 1 + 1 谢谢@Thanks!
siuhoapdou + 1 + 1 谢谢@Thanks!
potatomato + 1 + 1 热心回复!
shou0823 + 1 + 1 谢谢@Thanks!
gaosld + 1 + 1 用心讨论,共获提升!
叶隽 + 1 热心回复!
Bizhi-1024 + 1 用心讨论,共获提升!
virs520 + 1 热心回复!
dota3 + 1 + 1 谢谢@Thanks!
AhBiao + 1 + 1 热心回复!
lzawww + 1 + 1 我很赞同!
uer + 1 + 1 我很赞同!
wwww7788549 + 1 热心回复!
egbert_tao + 1 + 1 热心回复!
WAlitudealiy + 1 谢谢@Thanks!
fengbolee + 1 + 1 用心讨论,共获提升!
testAPP + 1 + 1 谢谢@Thanks!
芽衣 + 2 + 1 破解流程很好
小朋友呢 + 2 + 1 谢谢@Thanks!

查看全部评分

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

changfuwu123 发表于 2022-10-16 15:23
大神,9月6号下午我在京东拍拍被骗了钱(华中师范大一一年所有费用(生活费,学费,杂费,学分费,其它费)(22990元)父母要我自己还学费。呜呜呜呜呜呜呜呜。
我已经报警了,但是别人刑警都帮查到6级了,大同刑警四队6号说帮我立案了,骗我立了,删了我的报警记录,不笔录,半个小时内钱在了,让冻结一直不冻。我被骗后1,2分钟就打电话了。连续打了1个小时,电话也不接,1个刑警在打游戏,另1个在玩抖音。
然后15号我就去了,一开始装不认识我,说我没来过大同刑警四队,因为我记得人长什么样子才承认来过。宁和我聊3个小时,拖到9月23号后,又和我说,还得10来天。我向110催促了,也不能算是举报。免强给个授案回执单。反正也不查案。拖到现在。
骗子平台虚拟银行账号我有(他把钱转给别人的卡了)
买上的QQ号,微信号,就买上2或3天最多10天就还给号主了。
①骗子QQ号:1953691864
②京东号jd_KyLzAo9hJuEq
③中国建设银行高飞柱 6217 0029 2015 1401 636
(好像这3个号的使用者是同一个人身份。下面这个人他就是收集卡,给犯罪团伙卖的。他不加陌生人。
卖卡号人Vx号:zhenxuan1315。
一开始的时候就查了这个QQ(注册地云南,[流泪][流泪][流泪]“登陆地是缅北”存在争议[流泪][流泪][流泪]
这个人的真实ip地址,他用的服务器没有查清。(国内外),登陆地并不一定是在缅北。现在已经还给原来的主人。怎么查代{过}{滤}理器,真实ip。[流泪][流泪][流泪][流泪][流泪]
怎么通过卖卡人,找到6号登陆这个QQ号真实的骗子下的那些受害人们(就是骗我的这个骗子同时骗的受害人们)。我好全国联名投诉。[流泪][流泪][流泪][流泪][流泪][流泪][流泪][流泪][流泪][流泪]


&#8203;
HNHuangJingYU 发表于 2021-9-18 22:22
顶风能尿三丈远 发表于 2021-1-4 09:36
应该要不了多久,我是2018年接触Android的,中间断断续续的,没有花太多时间,还是比较容易上手的

我学几个月了,中间也是断断续续,现在勉强能做些ctf题,高级逆向题看都看不懂
头像被屏蔽
pjchangew 发表于 2020-12-31 11:39
lifz888 发表于 2020-12-31 11:53
不错的分析,支持分享
keny 发表于 2020-12-31 11:57
不错的分析,支持分享
你心动什么 发表于 2020-12-31 11:59
很好的解题思路啊
小羽0101 发表于 2020-12-31 13:12
分析得不错。
qixiyun 发表于 2020-12-31 13:48
精彩!!!!
BZF187577 发表于 2020-12-31 13:51
嗯,很厉害很精彩,请问这么厉害,我可以学会吗
isroot 发表于 2020-12-31 14:10
学学一波,感谢分享
QRQ 发表于 2020-12-31 15:06
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 12:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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