app3-安卓逆向
题目下载地址

app3-安卓逆向

  • 1.提取文件
  • 2.分析文件
  • 3.解密脚本

1.提取文件

下载题目后得到一个是.ab 后缀名的文件,查下资料

什么是一 .AB 文件?
Android的SDK(软件开发工具包)程序创建并访问附加的文件.ab扩展。该软件有一个版本的基于Microsoft Windows的系统,用户可以安装其他版本的基于Mac平台。而Android调试桥应用程序是一个小程序集成到Android的SDK软件,这是一个命令行程序。文件中的AB格式的内容包括参考使用Android开发项目的输出文件的开发库和其他文件。这些AB文件是用来还原关联使用Android SDK软件创建一个Android应用程序开发项目的数据备份文件。谷歌开发了Android SDK软件和AB文件格式。一般,AB文件不包括APK文件,它们是Android移动应用程序本身,而只是快照和引用其他文件和元素。 “亚行备份-all”是一个命令的用户可以键入创建一个Android SDK项目的AB备份文件,并将其存储在该项目中的目录。在另一方面“亚行备份-apk -all”创建与目录相关的APK文件,其中Android的SDK项目发现了一个AB的备份文件。在“亚行恢复backup.ab”命令将恢复应​​用程序

使用abe-all.jar文件吧.ab文件转换为tar文件

abe-all.jar unpack app3.ab app3.tar

解压后得到

文件中有两个db文件,这是数据库文件,尝试使用DB Browser for SQLite打开,发现数据库被加密了,尝试逆序APP找到密码

a文件夹下有一个APK文件,更改app安装包后缀为zip,

把这四个文件提取出来。
使用dex2jar将dex文件转换为jar文件,得到一个jar文件,这个文件中包含了大部分程序逻辑

d2j-dex2jar.bat classes.dex

2.分析文件

⾸先查看MainActivity,可以看到onCreate后,调⽤了a函数。

重点分析这里可以的到密码
aVar.a(contentValues.getAsString(“name”), contentValues.getAsString(“password”));
得到Stra1234

把这个分解下

tmp = aVar.b(a, contentValues.getAsString(“password”))

这里调用了b类中的a方法只传递了第一个参数(“Stra1234”)。
再分析b类中的a方法

经过b类中的a方法加密后返回一个值,假设为tmp。这里的a是“Stra1234”。
aVar.a(a + tmp ).substring(0, 7)
这里接着调用a类中的a方法,因为这里只有一个参数所以调用的是这个。

这个方法中调用了b类的b方法,参数是“Stra1234”+ tmp+"yaphetshan"

最后的返回值要取前7位,大概算法分析完成
a方法和b方法我们可以直接复制出来用,就不用使用别的语言再单独实现了,其实这个算法并不复杂

3.解密脚本

/*
* @Author: 夏了茶糜
* @Date:   2020-03-22 21:16:41
* @Last Modified by:   夏了茶糜
* @Last Modified time: 2020-03-22 21:26:55
*/
import java.security.MessageDigest;public class main {public static void main(String[] args){String str2 = "Stra1234";String str3 = a(str2);System.out.print("密钥 = ");System.out.print(b(str2 + str3 + "yaphetshan").substring(0,7));}public static final String a(String str) {int i = 0;char[] cArr = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};try {byte[] bytes = str.getBytes();MessageDigest instance = MessageDigest.getInstance("MD5");instance.update(bytes);byte[] digest = instance.digest();int length = digest.length;char[] cArr2 = new char[(length * 2)];int i2 = 0;while (i < length) {byte b = digest[i];int i3 = i2 + 1;cArr2[i2] = cArr[(b >>> 4) & 15];i2 = i3 + 1;cArr2[i3] = cArr[b & 15];i++;}return new String(cArr2);} catch (Exception e) {return null;}}public static final String b(String str) {int i = 0;char[] cArr = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};try {byte[] bytes = str.getBytes();MessageDigest instance = MessageDigest.getInstance("SHA-1");instance.update(bytes);byte[] digest = instance.digest();int length = digest.length;char[] cArr2 = new char[(length * 2)];int i2 = 0;while (i < length) {byte b = digest[i];int i3 = i2 + 1;cArr2[i2] = cArr[(b >>> 4) & 15];i2 = i3 + 1;cArr2[i3] = cArr[b & 15];i++;}return new String(cArr2);} catch (Exception e) {return null;}}}
C:\Users\Administrator\Desktop>java main
KEY = ae56f99

得到密钥ae56f99
使用DB Browser for SQLite打开数据库

得到一个加密的数据

VGN0ZntIM2xsMF9Eb19ZMHVfTG92M19UZW5jM250IX0=

看着像base64

In [8]: import base64In [1]: base64.b64decode("VGN0ZntIM2xsMF9Eb19ZMHVfTG92M19UZW5jM250IX0=".encode("UTF-8")).decode("UTF-8")
Out[1]: 'Tctf{H3ll0_Do_Y0u_Lov3_Tenc3nt!}'

得到flag

Tctf{H3ll0_Do_Y0u_Lov3_Tenc3nt!}

XCTF-mobile app3相关推荐

  1. XCTF mobile新手区解题记录(WP)以及一些总结和思考

    XCTF mobile新手区解题记录以及一些总结和思考 前言 题目:app3 题目:easy-apk 题目:easy-java 题目:easy-jni 题目:easy-so 题目:app1 题目:Ph ...

  2. [XCTF] mobile easy-apk

    直奔入口MainActivity.java,看一下onClick后干了啥 if(Base64Encode(inputVal.getBytes()).equals("5rFf7E2K6rqN7 ...

  3. 【偶尔一道ctf】xctf adword mobile easy-apk

    最近在学习ctf,偶尔会做一些ctf题,打算记录下做题的步骤和思路,打算学习ctf的小白可以跟着一起动手学习.本题是安卓题目. 题目apk下载地址 https://adworld.xctf.org.c ...

  4. XCTF国际联赛总决赛 八大看点抢先解读!

    7月16日,第二届XCTF国际联赛总决赛暨网络安全技术论坛将在北京国际会议中心拉开帷幕.比赛即将打响,比赛和现场活动细节曝光,引发国内外网络安全行业人士广泛关注,下面就来提前揭秘现场的八大看点. 看点 ...

  5. 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design

    手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). ​​​​​​高效的CNN设计不只是用在服务器,云端,资源 ...

  6. Paper4:Voxel-Based Extraction and Classification of 3-D Pole-Like Object From Mobile LIDAR Point Clo

    Voxel-Based Extraction and Classification of 3-D Pole-Like Object From Mobile LIDAR Point Cloud Data ...

  7. 微信同步通讯录服务器繁忙,企业微信同步通讯录时提示 mobile existed

    本帖最后由 dr琅琊人 于 2020-3-26 10:47 编辑 http://XXXX.com"},"process":"/SA/weixin/process ...

  8. Windows Mobile 6.0 SDK和中文模拟器下载

    [转] Windows Mobile 6.0 SDK和中文模拟器下载 Windows Mobile 6.5 模拟器 2010年12月06日 星期一 07:48 转载自 zhangyanle86 终于编 ...

  9. Ring Tone Manager on Windows Mobile

    2019独角兽企业重金招聘Python工程师标准>>> 手机铃声经常能够体现一个人的个性,有些哥们儿在自习室不把手机设置成震动,一来电就@#$^%^@&^%#$&$* ...

  10. windows mobile做一个摄象头预览程序

    zdirectshow的原理大概大家都知道,基本就是用微软封装的接口来实现硬件无关性,但是最终调用的接口都要在驱动层有对应的实现: 为了更清楚地演示directshow的数据传输过程,我必须说明的这个 ...

最新文章

  1. Sqlserver 游标的写法记录
  2. 【Python基础】Python 流程控制专题总结
  3. WebService_Unity
  4. Java并发编程-原子性变量
  5. 掌握这四点核心思想,统计学才算入门
  6. 判断release模式_AbstractQueuedSynchronizer共享模式与基于Condition的等待/通知
  7. mysql数据库运行性能检查脚本
  8. SnakeYaml 嵌套Map写入格式 DumperOptions格式设置
  9. 老师用计算机教我们画画拼音,《ang eng ing ong》教案
  10. java.lang.IllegalArgumentException: Failed to decrypt问题解决
  11. 分析DuxCms之AdminUserModel
  12. pycharm项目里的根目录
  13. python实现火车票查询_python实现12306火车票查询的实例全过程
  14. 中小型企业应该选择什么样的OA系统?
  15. 给跪了!见过最高逼格的项目总结报告!
  16. CDB断点调试器报错:Exception at 0x7715c5af, code: 0xe06d7363
  17. 基于ChatGPT制作的一款英语口语练习应用SpokenAi
  18. 二级域名的创建、简单配置域名解析
  19. spyglass CDC方法学
  20. playcanvas 引擎

热门文章

  1. 梅西自强成“霉球”,阿根廷“可能”折在半路,今年的世界杯……
  2. SpringBoot 接口数据加解密
  3. Activiti6:解决定时器不执行的问题(定时catching事件的使用)
  4. vue动态面包屑导航
  5. [手机分享]黑莓手机8系列分享之——黑莓88XX系列
  6. Zoom天使投资人Jim Scheinman:Zoom的诞生始末
  7. Android 差分包制作流程分析
  8. TypeError: date.locale is not a function
  9. w10计算机运行特别卡,win10会很卡,详细教您怎么解决
  10. nextcloud19.0.1部署