攻防世界-安卓easyso

攻防世界-安卓easyso

运行

  • 是一个输入验证的一个程序,当验证失败的时候会弹出提示
  • 因此该题需要我们逆程序拿到正确的验证码

在这里插入图片描述

apk逆向

MainActivity

  • 利用AndroidKiller逆apk
  • 找到MainActivity
  • 发现当cyberpeace返回1时,验证通过
package com.testjava.jack.pingan2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity
  extends AppCompatActivity
{
  protected void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(2131296283);
    ((Button)findViewById(2131165218)).setOnClickListener(new View.OnClickListener()
    {
      public void onClick(View paramAnonymousView)
      {
        if (cyberpeace.CheckString(((EditText)MainActivity.this.findViewById(2131165233)).getText().toString()) == 1)//cyberpeace返回1时则验证成功
        {
          Toast.makeText(MainActivity.this, "验证通过!", 1).show();
          return;
        }
        Toast.makeText(MainActivity.this, "验证失败!", 1).show();
      }
    });
  }
}

cyberpeace

  • 发现加载了cyberpeace这个库,因此找到这个库观察代码
package com.testjava.jack.pingan2;

public class cyberpeace
{
  static
  {
    System.loadLibrary("cyberpeace");
  }
  
  public static native int CheckString(String paramString);
}

so文件逆向

找到关键返回

 return strcmp(v9, "f72c5a36569418a20907b55be5bf95ad") == 0;
//当v9的为后面一串内容时,则返回1,那么f72c5a36569418a20907b55be5bf95ad为密文

加密操作1

  if ( *v9 ) //v9为我们输入的字符
  {
    *v9 = v9[1];
    v9[1] = v14;//将v9[0]与v9[1]互换
    if ( strlen(v9) >= 3 )
    {
      v15 = 2LL;
      do
      {
        v16 = v9[v15];
        v9[v15] = v9[v15 + 1];
        v9[v15 + 1] = v16; //两个两个互换,例如v9[0]与v9[1]互换,v9[2]与v9[3]互换
        v15 += 2LL;//间隔为2
      }
      while ( strlen(v9) > v15 );
    }
  }

加密操作2

  if ( strlen(v9) >= 2 )
  {
    v12 = 0LL;
    do
    {
      v13 = v9[v12];        
      v9[v12] = v9[v12 + 16];
      v9[v12++ + 16] = v13;//即将输入的字符对半分,将v9[0]与v9[16]互换,v9[1]与v9[17]互换
    }
    while ( strlen(v9) >> 1 > v12 );//strlen(v9) >> 1即取输入的长度的一半
  }

解密脚本

crpty = 'f72c5a36569418a20907b55be5bf95ad'
crpty = list(crpty)
print crpty
for i in range(0,len(crpty),2):
	temp=''
	temp = crpty[i]
	crpty[i]=crpty[i+1]
	crpty[i+1]=temp
print crpty
for i in range(16):
	temp=''
	temp = crpty[i]
	crpty[i] = crpty[i+16]
	crpty[i+16]=temp
print crpty
decrpty=''.join(crpty)
print decrpty
#90705bb55efb59da7fc2a5636549812a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值