闲来无事,去找一些CrackMe练练手,偶然发现一个网站有三个CrackMe,但都比较简单,只用到了Jadx-gui和Frida,现在把这三道题解法贴出来。
原站地址:
 
 CrackMe0x01
 这道题的介绍是: The very basic crackme challenge. Gives you chance to get familiar with all Android RE tools.
翻译过来就是这个题很简单,让你练练手熟悉一下。
我们先安装App看看(文末上传三个APP)
 
可以看到只有一个密码的提交键
于是我们打开Jadx-gui来观赏一下。
 
打开Jdax-gui后先找到按键的onClick函数,然后便看到了明晃晃的大字“Congratulations!”。
成功的入口就是flag不为空,所以我们从getFlag继续点进去
 
点进去之后发现getFlag里面嵌套了一个equals判断,为true的话就成功了,我们进去看一下有没有密码。
 
点开时候发现果然是练手题,明文密码就直接出现了,我们直接输入密码就可以进入程序了。
 
 
 CrackMe0x02
 这道题的介绍是: What if JD-GUI doesn’t show you the password?
翻译过来就是,这次Jadx-gui可就不显示密码了。
我们先安装App看看(文末上传三个APP)
 
赫赫,如出一辙,那就继续用Jadx-gui看看
 
 
可以看到前面的函数都是一样的操作,但题目说没有明文,那我们继续看getData里面是什么。
 
我们可以看到,这次的密码实在资源文件中,但资源文件中的secret是不可见明文的,那这时我们就要用到Frida来hook一下看看了。
新版Jadx-gui可以直接右键复制Frida代码,以下就是Frida代码了。
 
 
  
   
    | 
      
      1
      
     
      2
      
     
      3
      
     
      4
      
     
      5
      
     
      6
      
     
      7
      
     
      8
      
     
      9
      
     
      10
      
     
      11
      
     
      12
      
     
      13
       | 
    
     
      
       function main() {
       
      
         
       Java.perform( function(){
       
      
           
       let Data 
       = 
       Java.use(
       "com.entebra.crackme0x02.Data"
       );
       
      
           
       Data[
       "getData"
       ].implementation 
       = 
       function (context) {
       
      
             
       console.log(
       'getData is called' 
       + 
       ', ' 
       + 
       'context: ' 
       + 
       context);
       
      
             
       let ret 
       = 
       this.getData(context);
       
      
             
       console.log(
       'getData ret value is ' 
       + 
       ret);
       
      
             
       return 
       ret;
       
      
           
       };
       
      
         
       })
       
      
       }
       
      
        
       
      
       setImmediate(main);
       
       | 
   
  
 
 然后我我们启动hook,再随便输入一个字符串,触发一下getData函数
 
这下我们就看到密码了,输入密码后就成功进去了。
 
 
 CrackMe0x03
 这道题的介绍是: Some hashes, cats and strings generation.
翻译过来就是,这次Jadx-gui不仅不显示密码了,还用到了哈希。
我们先安装App看看(文末上传三个APP)
 
赫赫,我就猜到还是一样的,老样子Jadx-gui
 
开局还是一样的操作,我们再进去看看
 
这次的getFlag中增加了一个isPassWorkOk函数,当这个函数返回true后,就会进入程序显示flag。
 
我们可以看到在isPassWorkOk里面是直接通过hash来进行比较了,被比较的hash值是:
 
  
  ac43bb53262e4edd82c0e82a93c84755
 
 
 
 
   
 
 我去了各个md5网站都没有找到这个值的明文,但我们可以看出来,这次的密码长度为6,所以如果暴力遍历的话有成百上千亿种方案,我先是把数字和小写字母的组合遍历一遍后没有结果,于是就想着只要拿到flag就可以了。
接着就开始写Frida代码,只要把isPassWork返回true就可以得到flag进入程序了,代码如下:
 
 
  
   
    | 
      
      1
      
     
      2
      
     
      3
      
     
      4
      
     
      5
      
     
      6
      
     
      7
      
     
      8
      
     
      9
      
     
      10
      
     
      11
      
     
      12
      
     
      13
       | 
    
     
      
       function main() {
       
      
         
       Java.perform( function(){
       
      
           
       let Data 
       = 
       Java.use(
       "net.persianov.crackme0x03.Data"
       );
       
      
       Data[
       "isPasswordOk"
       ].implementation 
       = 
       function (
       str
       ) {
       
      
               
       console.log(
       'isPasswordOk is called' 
       + 
       ', ' 
       + 
       'str: ' 
       + 
       str
       );
       
      
               
       let ret 
       = 
       true;
       
      
               
       console.log(
       'isPasswordOk ret value is ' 
       + 
       ret);
       
      
               
       return 
       ret;
       
      
           
       };
       
      
         
       })
       
      
       }
       
      
        
       
      
       setImmediate(main);
       
       | 
   
  
 
 hook之后随便输入一个6位数的字符串
 
然后我们就得到flag进去了
 
 
 
   
 
 三道基础题这就解完了,下次再找找有没有稍微提升一些的再分享给大家。
 
  
  
    
 
  
 
更多【 Android逆向CrackMe基础三连题】相关视频教程:www.yxfzedu.com