Sharif University CTF 2016 -- Android App
很多种的方案:
方案 A: 直接逆向读代码
方案 B: 解包,加入debug信息,重新打包,动态调试
方案 C: 解包,改代码加入log.i整出flag, 去掉MainActivity里面d=什么也可以,重新打包
方案 D: 山寨一个, 抄一个,把那些不要的去掉
=============================
方案A:
step 01
从Sharif_CTF.apk里导出classes.dex
step 02
用d2j转成classes-dex2jar.jar
step 03
用jd-gui打开classes-dex2jar.jar,看源码
public void onClick(View paramView)
{
new String(" ");
paramView = this.a.b.getText().toString();
Log.v("EditText", this.a.b.getText().toString());
new String("");
int i = this.a.processObjectArrayFromNative(paramView);
int j = this.a.IsCorrect(paramView);
paramView = this.a.d + i + " ";
try
{
Object localObject = MessageDigest.getInstance("MD5");
((MessageDigest)localObject).update(paramView.getBytes());
paramView = ((MessageDigest)localObject).digest();
localObject = new StringBuffer();
i = 0;
for (;;)
{
if (i >= paramView.length)
{
if ((j == 1) && (this.a.e != "unknown")) {
this.a.c.setText("Sharif_CTF(" + ((StringBuffer)localObject).toString() + ")");
}
if ((j == 1) && (this.a.e == "unknown")) {
this.a.c.setText("Just keep Trying :-)");
}
if (j != 0) {
break;
}
this.a.c.setText("Just keep Trying :-)");
return;
}
((StringBuffer)localObject).append(Integer.toString((paramView[i] & 0xFF) + 256, 16).substring(1));
i += 1;
}
return;
}
catch (NoSuchAlgorithmException paramView)
{
paramView.printStackTrace();
}
}
从这里看出来 flag与i和d有关, d可以在MainActivity里的OnCreate里得到 this.d = 114366;
i是从native int processObjectArrayFromNative(String paramString)里得到的
step 04
从Sharif_CTF.apk里导出lib\armeabi\libadnjni.so,在ida里打开libadnjni.so
int __fastcall Java_com_example_ctf2_MainActivity_processObjectArrayFromNative
{
*v21 = ;
v25 = *v21;
result = v25;
}
得到i= 92060626;
step 05
public class Main{
public static void main(String[] args) throws NoSuchAlgorithmException{
int d = 114366;
int i= 92060626;
String paramView=d+i+" ";
Object localObject = MessageDigest.getInstance("MD5");
((MessageDigest) localObject).update(paramView.getBytes());
byte[] paramView2 = ((MessageDigest) localObject).digest();
localObject = new StringBuffer();
i = 0;
for (;;) {
if (i >= paramView2.length){
System.out.println("Sharif_CTF(" + ((StringBuffer)
localObject).toString() + ")");
break;
}
((StringBuffer) localObject).append(Integer.toString(
(paramView2[i] & 0xFF) + 256, 16).substring(1));
i += 1;
}
}
}
Sharif_CTF(833489ef285e6fa80690099efc5d9c9d)
Sharif University CTF 2016 -- Android App的更多相关文章
- Sharif University CTF 2016 -- Login to System (PWN 200)
EN: It's easy to find out where is the bug : .text:0000000000400DE4 ; void *start_routine(void *).te ...
- Sharif University CTF 2016 - Smooth As Silk
Category: Crypto Points: 200 Solves: 11 Description: p > q n = p*q = 1146153281852525177586999436 ...
- zctf 2016 android writeup - Jieming的博客
本文为2016年zctf中android的writeup. 首先点我下载题目.使用jeb反编译,对username和password进行部分验证后,再将username+password及一个数据库查 ...
- fir.im Weekly - 如何进行 Android App 性能优化
关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...
- [FMX] Android APP 启动黑屏优化补丁
使用说明 *************************************************** Android APP 启动黑屏优化补丁 作者: Swish, YangYxd 201 ...
- android app性能优化大汇总(UI渲染性能优化)
UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得“我的app加载很快”很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交互心理学的角度来考虑 ...
- Visual Studio 2015开发Android App问题集锦
Visual Studio 2015开发Android App 启动调试始终无法完成应用部署的解决方案 创建一个Android App项目后,直接启动调试发现Visual Studio Emulato ...
- 老李分享:android app自动化测试工具合集
老李分享:android app自动化测试工具合集 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...
- Android APP架构设计——MVP的使用示例
0. 前言 为了更好地进行移动端架构设计,我们最常用的就是MVC.MVP和MVVM,作为三个最耳熟能详的三大架构,应用可谓非常广泛.对于这三种架构设计以及优缺点已经在Android APP架构设计-- ...
随机推荐
- NPOI Excel 单元格背景颜色对照表
NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillP ...
- Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统 ...
- [DFNews] Cellebrite UFED Logical/Physical Analyzer 3.8.1 维护性更新
Maintenance Release Cellebrite has released a maintenance version of UFED Physical / Log ...
- (转)打印相关_C#图片处理Bitmap位图缩放和剪裁
原文地址:http://blog.sina.com.cn/s/blog_6427a6b50101el9d.html 在GDI+中,缩放和剪裁可以看作同一个操作,无非就是原始区域的选择不同罢了. /// ...
- Hadoop内功修炼
IT十八掌<大数据内功修炼系列课程>强势推出!由实战派名师徐培成亲自操刀,学完做不了大数据我们负全责!2015.12.21前,优惠价:4999(名额已不多!)2015.12.31前,优惠价 ...
- Windows Server 2012重复数据删除技术体验
在企业环境中,对磁盘空间的需求是惊人的.数据备份.文件服务器.软件镜像.虚拟磁盘等都需要占据大量的空间.对此,微软在Windows Server 2012中引入了重复数据删除技术.重复数据删除技术通过 ...
- 关于Python的数据分析工具
Python - 核心编程环境NumPy/SciPy - 用于快速.高效的数组和矩阵运算IPython - 用于Python的可视化交互开发matplotlib - 用于数据的图形可视化pandas ...
- Java设计模式1——策略模式(Strategy Pattern)
最近觅得一本好书<您的设计模式>,读完两章后就能断言,一定是一头极品屌丝写的,而且是专写给开发屌丝男的智慧枕边书,小女子就委屈一下,勉强看看,人笨,谁让他写得这么通俗易懂呢!为了加深理解, ...
- django--模型元选项(八)
1.db_table Options.db_table该模型所用的数据表的名称:db_table = 'test'为节省你的时间,Django 会根据模型类的名称和包含它的应用的名称自动指定数据库表名 ...
- select问题总结
select 从后台取来的值如何放到select里面的文本框中? $(".type option").each(function(){ if($(this).val() == de ...