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架构设计-- ...
随机推荐
- HttpWebRequest-header设置
http://www.cnblogs.com/yczz/archive/2012/06/01/2530484.html http://blog.csdn.net/htsnoopy/article/de ...
- SQL查询一个月第一天/最后一天及日期格式化
1.一个月第一天的Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2.本周的星期一Select DATEADD(wk, DATEDIFF(wk,0,ge ...
- PL/SQL如何导入dmp文件
-------------创建表空间 create tablespace portal_data datafile'E:\OracleDB\System_TableSpace\portal_data0 ...
- 在<s:iterator>标签里给动态表格添加序号
在<s:iterator>标签里给动态表格添加序号,需要用到<s:iterator>标签里的Status属性里的count eg:<s:iterator value=&q ...
- smb:unrecognized service
[root@sycflash ~]#service smb status smb:unrecognized service 提示:smb:unrecognized service.这时你会按照常规的方 ...
- qt环境下Mapx组建的编程---------regoin
#include "widget.h" #include "ui_widget.h" #include <QPushButton> #include ...
- HsqlDB Demo
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...
- live555+ffmpeg如何提取关键帧(I帧,P帧,B帧)
live555+ffmpeg如何提取关键帧(I帧,P帧,B帧)开发流媒体播放器的时候,特别是在windows mobile,symbian(S60)平台开发时,很可能遇到需要自己开发播放器的情况.S ...
- MFC 响应控件消息
第一种,消息映射 第二种,重写OnCommand BOOL CmfcdlgDlg::OnCommand(WPARAM wParam, LPARAM lParam){ switch(wParam) { ...
- sublime 工具构建
1 Sublime Text 3 配置react语法校验 原文地址:https://segmentfault.com/a/1190000004369542?_ea=585496 终端安装 npm in ...