0x0
弱菜愚昧,14年的東西, 現在才做, 不過,加油就行。
0x1
第一題
直接上代碼
String v3 = this.val$edit.getText().toString();
String v5 = MainActivity.this.getTableFromPic();
String v4 = MainActivity.this.getPwdFromPic();
Log.i("lil", "table:" + v5);
Log.i("lil", "pw:" + v4);
try {
String v2 = MainActivity.bytesToAliSmsCode(v5, v3.getBytes("utf-8"));
Log.i("lil", "enPassword:" + v2);
}
catch(UnsupportedEncodingException v1) {
v1.printStackTrace();
}
if(v4 == null || (v4.equals("")) || !v4.equals(v2)) {
AlertDialog$Builder v0 = new AlertDialog$Builder(MainActivity.this);
v0.setMessage(2131361809);
v0.setTitle(2131361808);
v0.setPositiveButton(2131361811, new DialogInterface$OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
看完代碼就一個思路, 從圖片獲取一個table, passwd 。 然後根據我們的輸入從table找一個偏移, 將連接後的字符串與passwd 比較。 這裏因爲有Log.i 所以DDMS裏看一下就很明顯了。 passwd is 581026
第二題
static {
System.loadLibrary("crackme");
}
public native boolean securityCheck(String arg1) {
}
public void onClick(View v) {
if(MainActivity.this.securityCheck(MainActivity.this.inputCode.getText().toString())
) {
MainActivity.this.startActivity(new Intent(MainActivity.this, ResultActivity.class));
}
else {
Toast.makeText(MainActivity.this.getApplicationContext(), "驗證碼校驗失敗", 0).show();
}
關鍵的就這麼幾行 , 這裏指示我們要去native 層找線索, 直接把lib拖進ida.
有個關鍵的對比 ,但是並不正確, 猜測可能是javahook 之類的。
動態調試吧。 IDA附加到apk的流程這裏不多說了,只是一開始attachapk就掛了,沒辦法 ,就用jdb斷在JNI_onLoad上,然後就是運行一下去看原來的那個字符串, 發現現在是aiyou,bucuoo了。
第三題
今天暫時到這裏
有興趣的朋友可以看看看雪的writeup , 兩個大牛都很贊