DDCTF安卓题-writeup

0x01引子

前段做了一个滴滴CTF的其中一道安卓题目,题目并不难,主要分享一下做题过程和思路。

apk下载地址
http://download.csdn.net/detail/dad9988/9887419

题目包

0x02要求与提示

赛题背景:本挑战结合了Android, Java, C/C++,加密算法等知识点,考察了挑战者的binary逆向技术和加密算法能力。

赛题描述:本题是一个app,请试分析app中隐藏的key,逆向加密算法并得到对应的秘钥。可以在app中尝试输入key,如果正确会显示“correct”,如果错误会显示“Wrong”。
提 示:阅读assembly code,理解xor的加密逻辑和参数,解出答案。
评分标准:key正确则可进入下一题。

Flag格式为DDCTF-XXXXXXXXXXXX@didichuxing.com

还是很好辨认的

0x02分析与过程

运行app后

直接点击下方的TEST按钮显示Wrong
上apkkiller
找到关键位置,进行关键词搜索(搜Wrong)。

appkiller找到关键位置

反编译源码(appkiller上点击java图标)

关键位置源码

这里直接贴上来代码

public class MainActivity
  extends AppCompatActivity
{
  private TextView mFlagEntryView;
  private TextView mFlagResultView;
  
  static
  {
    System.loadLibrary("hello-libs");
  }
  
  public void onClickTest(View paramView)
  {
    if (this.mFlagEntryView.getText().toString().equals(stringFromJNI())) {
      this.mFlagResultView.setText("Correct");
    }
    for (;;)
    {
      return;
      this.mFlagResultView.setText("Wrong");
    }
  }
  
  protected void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(2130968602);
    this.mFlagEntryView = ((TextView)findViewById(2131427413));
    this.mFlagResultView = ((TextView)findViewById(2131427415));
  }
  
  public native String stringFromJNI();
}

其中onClickTest响应TEST按钮点击

this.mFlagEntryView.getText().toString().equals(stringFromJNI())

从mFlagEntryView得到view控件内容,tostring转string型,使用equals对比stringFromJNI()返回值。

一般我们应该跟踪stringFromJNI()函数看他返回了什么值,接下来查找该函数的来源

static
{
System.loadLibrary("hello-libs");
}

加载了so模块hello-libs

7zip打开apk

这个时候分析so文件获取flag就行了。

so文件拖入IDA

这里很简单并没有加什么混淆,直接写在so文件中,到这里就算完成这题。

0x04另一种思路

如果这个题目的so中是经过运算加密返回的,并无法直接静态看到flag那该怎么办。

this.mFlagEntryView.getText().toString().equals(stringFromJNI())

前面我们分析过这个位置,因为使用equals进行字符串对比。
看下equals的java解释

equals解释

Equals之前使用了tostring,所以如果mFlagEntryView的内容与stringFromJNI返回值相同才会出现true的情况,那么也就是说stringFromJNI是把flag返回到程序领空的,我们直接修改smil代码把flag显示在mFlagResultView中。

直接修改smail语句实现flag显示在view中
直接修改smail语句实现flag显示在view中

直接获取stringFromJNI返回值然后赋值给mFlagResultView,再安装运行即可。


打包运行效果

首发在先知社区,搬运到这里,稍微做了一些细节修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转自 1. 什么是Activity? 四大组件之一,一般的,一个用户交互界面对应一个activity setCon...
    joe1632阅读 1,423评论 0 7
  • 文章作者:Tyan博客:noahsnail.com | CSDN | 简书 CHAPTER3 Method...
    SnailTyan阅读 744评论 1 4
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,572评论 0 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 土豆,在北方尤其西北甘肃一带是除了面粉之外的重要食材,人们总是可以将简单的食材变着花样的做出各种美味佳肴,土豆粉就...
    脆皮墨阅读 687评论 0 0