文章目录

  • 一、Ph0en1x-100
  • 二、答题步骤
    • 1.jadx反编译apk文件
    • 2.IDA
    • 3.apktool,模拟器动态调试
    • 3.JEB
  • 总结

一、Ph0en1x-100

题目链接:https://adworld.xctf.org.cn/task/task_list?type=mobile&number=6&grade=0&page=1

二、答题步骤

1.jadx反编译apk文件

import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/* loaded from: classes.dex */
public class MainActivity extends AppCompatActivity {EditText etFlag;public native String encrypt(String str);public native String getFlag();static {System.loadLibrary("phcm");}/* JADX INFO: Access modifiers changed from: protected */@Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.app.Activitypublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.etFlag = (EditText) findViewById(R.id.flag_edit);}public void onGoClick(View v) {if (getSecret(getFlag()).equals(getSecret(encrypt(this.etFlag.getText().toString())))) {Toast.makeText(this, "Success", 1).show();} else {Toast.makeText(this, "Failed", 1).show();}}public String getSecret(String string) {try {byte[] hash = MessageDigest.getInstance(encrypt("KE3TLNE6M43EK4GM34LKMLETG").substring(5, 8)).digest(string.getBytes("UTF-8"));if (hash != null) {StringBuilder hex = new StringBuilder(hash.length * 2);for (byte b : hash) {if ((b & 255) < 16) {hex.append("0");}hex.append(Integer.toHexString(b & 255));}return hex.toString();}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e2) {e2.printStackTrace();}return null;}
}

发现

我们看到 encrypt()以及 getFlag()都在 so 文件里,所以我们IDA

2.IDA

encrypt()函数解析:

其实这个 encrypt()函数很简单,就是把输入的字符串每位的 ASCII 码减去 1

getFlag()函数解析:

getFlag我们就采用动态解析

3.apktool,模拟器动态调试

第一步:安装adb

第二步:安装安卓模拟器

下载链接:https://www.yeshen.com/

第三步:apktool

下载链接:https://ibotpeaches.github.io/Apktool/install/

拆包

java -jar apktool.jar d f6adc401d0eb472892a4ac4481f76a85.apk


打开AndroidManifest.xml 添加 android:debuggable=“true”

<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ph0en1x.android_crackme" platformBuildVersionCode="22" platformBuildVersionName="5.1.1-1819727"><application android:debuggable="true" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"><activity android:name="com.ph0en1x.android_crackme.MainActivity"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application>
</manifest>

打包

java -jar apktool.jar b f6adc401d0eb472892a4ac4481f76a85

的文件夹里会出现一个 dist 文件夹,里面就是重新生成的 APK,但是此时的 APK
是不可以使用的,因为还没有签名!

生成签名

keytool -genkey -alias mykey -keyalg RSA -validity 40000 -keystore demo.keystore


注意参数:

  1. -keystore demo.keystore 为密钥的位置
  2. -signedjar <new.apk> <old.apk> <demo.keysotre> 正式签名

执行命令

jarsigner -verbose -keystore demo.keystore -signedjar new.apk f6adc401d0eb472892a4ac4481f76a85.apk mykey

3.JEB

用JEB打开new.apk

我们在 onGoClink()方法下打断点,断点的位置即为 getFlag()返回的位置

使用 adb 查看是否已经连接上设备

在 CMD 中以 adb shell am start -D -n 包名/入口activity名的命令格式执行以下命令开始运行程序:

adb shell am start -D -n com.ph0en1x.android_crackme/com.ph0en1x.android_crackme.MainActivity

然后模拟器运行 APP

然后 attach 进入调试模式,这时候 app 随便输入flag,成功断下

然后就得到了 getFlag()的字符串ekfz@q2x/tfn0mF6/rbqanqntfg^Ehq|`

最后只要编写脚本即可获得 flag

flag="ek`fz@q2^x/t^fn0mF^6/^rb`qanqntfg^E`hq|"
flag_list=[]
for i in flag:flag_list.append(chr((ord(i)+1)))
print("".join(flag_list))

flag为:flag{Ar3_y0u_go1nG_70_scarborough_Fair}


总结

  • adb
  • apktool
  • jd-gui
  • IDA
  • 安卓模拟器

【愚公系列】2021年12月 攻防世界-简单题-MOBILE-008(Ph0en1x-100)相关推荐

  1. 【愚公系列】2021年12月 攻防世界-简单题-CRYPTO-010(转轮机加密)

    文章目录 前言 一.转轮机加密 二.使用步骤 1.下载附件 2.脚本解密 总结 前言 题目描述:你俩继续往前走,来到了前面的下一个关卡,这个铺面墙上写了好多奇奇怪怪的 英文字母,排列的的整整齐齐,店面 ...

  2. 【愚公系列】2021年12月 攻防世界-简单题-MOBILE-010(easy-dex)

    文章目录 前言 一.easy-dex 二.使用步骤 1.dex和odex文件结构 2.jadx分析apk 3.IDA 4.jadx打开easy-dex.dex 总结 前言 APK解包后是没有dex文件 ...

  3. 【愚公系列】2021年12月 攻防世界-简单题-REVERSE-005(game)

    文章目录 一.game 二.使用步骤 1.IDA静态分析 2.OD动态分析 总结 一.game 题目链接:https://adworld.xctf.org.cn/task/task_list?type ...

  4. 【愚公系列】2021年12月 攻防世界-简单题-CRYPTO-002(Caesar)

    文章目录 前言 一.Caesar 二.使用步骤 1.下载附件 2.凯撒密码 总结 前言 题目描述:你成功的解出了来了灯谜,小鱼一脸的意想不到"没想到你懂得这么多啊!" 你心里面有点 ...

  5. 【愚公系列】2021年12月 攻防世界-简单题-MOBILE-002(app1)

    文章目录 一.app1 二.答题步骤 1.运行app 2.jadx反编译apk文件 总结 一.app1 题目链接:https://adworld.xctf.org.cn/task/task_list? ...

  6. 【愚公系列】2021年12月 攻防世界-简单题-CRYPTO-003(Morse)

    文章目录 前言 一.Morse 二.使用步骤 1.下载附件 2.莫尔斯电码 总结 前言 题目描述:小鱼得意的瞟了你一眼,神神气气的拿走了答对谜语的奖励,你心里暗暗较劲 想着下一个谜题一定要比小鱼更快的 ...

  7. 【愚公系列】2021年12月 攻防世界-简单题-REVERSE-001(Hello, CTF)

    文章目录 一.Hello, CTF 二.使用步骤 1.IDA 总结 一.Hello, CTF 题目链接:https://adworld.xctf.org.cn/task/task_list?type= ...

  8. 【愚公系列】2021年12月 攻防世界-简单题-WEB-004(cookie)

    文章目录 一.cookie 二.使用步骤 1.点击获取在线场景 2.查看cookie 总结 1.概念 2.机制 3.修改或者删除cookie 一.cookie 题目链接:https://adworld ...

  9. 【愚公系列】2021年12月 攻防世界-进阶题-MISC-063(saleae)

    文章目录 一.saleae 二.答题步骤 1.logicdata 总结 一.saleae 题目链接:https://adworld.xctf.org.cn/task/task_list?type=mi ...

  10. 【愚公系列】2021年12月 攻防世界-进阶题-MISC-074(latlong)

    文章目录 一.latlong 二.答题步骤 1.file 2.AX.25 3.sox 4.multimon-ng 总结 一.latlong 题目链接:https://adworld.xctf.org. ...

最新文章

  1. VTK:几何对象之Tetrahedron
  2. codeforces438 D. The Child and Sequence
  3. c++ 使用正则匹配url
  4. php连接mysql执行sql语句_php+mysql 连接服务器、数据库以及执行SQL语句的类库
  5. java并发库之Executors常用的创建ExecutorService的几个方法说明
  6. 活跃在海底隧道的铁路“小蓝人”
  7. http://blog.sina.com.cn/s/blog_6a01140c0100wimi.html
  8. Java开发必须掌握的 21 个 Java 核心技术!
  9. vue: table制作发货单表格并打印
  10. 完全背包问题(Java)
  11. 怎样刻录系统启动光盘
  12. 计算机基础知识在哪里学,学习电脑基础知识先从哪方面入手?
  13. WPF窗体禁用Alt + F4键关闭窗体
  14. 微信小程序(三)自定义分享按钮和原生分享区分不同按钮的分享带参数分享和获取
  15. 基于JAVA糖果销售管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  16. HDU 6148 Valley Numer
  17. 今天是2019年最后一天,全球金融危机,离我们已经过去十年了
  18. 关于51单片机驱动DS18B20代码的感想
  19. OPC是什么及OPC简介
  20. Java根据自定义模板生成Word

热门文章

  1. YOLOV5网络结构
  2. 1156:求π的值(函数题)
  3. xgboost 中的二阶导数为什么收敛更快?
  4. pdf照片显示正常打印时被翻转_2020年上海二级建造师准考证打印常见问题
  5. JVM jvmpi (转)
  6. 人大金仓(Kingbase)数据库迁移——使用大金仓数据库迁移工具进行迁移
  7. 渔乡朱朱的三农短视频账号运作和变现方法
  8. 超声波清洗机 - 拆机与逆向工程
  9. 利用opencv实现九宫格拼图功能
  10. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计