アンドリュースネイティブタイトルは本当に多くのです。。。。。
JEB APK:
看onclick方法:
public void onGoClick(View arg5) {
if(this.getSecret(this.getFlag()).equals(this.getSecret(this.encrypt(this.etFlag.getText().toString())))) {
Toast.makeText(((Context)this), "Success", 1).show();
}
else {
Toast.makeText(((Context)this), "Failed", 1).show();
}
}
両側getSecrect方法で、この方法は、一時的に読んでいません。
ルックgetFlag()と暗号化()、だけでなく、多くのIDAを愛しているネイティブメソッドを、参照するには。。。。
IDAは、F5ずに脳にドラッグ:
暗号化:
//点击a1,按下y,输入JNIEnv*就能得到以下伪代码效果
int __cdecl Java_com_ph0en1x_android_1crackme_MainActivity_encrypt(JNIEnv *a1, int a2, int a3)
{
size_t v3; // esi
const char *s; // edi
v3 = 0;
for ( s = (*a1)->GetStringUTFChars(a1, (jstring)a3, 0); v3 < strlen(s); --s[v3++] )
;
return (*a1)->NewStringUTF(a1, s);
}
S大胆な推測ポインタは、文字列で渡されます。
ループを参照されたい:V3は、ループの長さは、セミコロン、-S [V3 ++]続いて、実行未満である場合によ
ここでは、保存のASCIIコードからS [V3 ++] 1.を見ることができる1マイナスそれぞれの文字に相当します。
getFlag方法を探します。
int __cdecl Java_com_ph0en1x_android_1crackme_MainActivity_getFlag(JNIEnv *a1)
{
signed int v1; // esi
char *v2; // edi
char v3; // al
int result; // eax
int v5; // [esp+26h] [ebp-46h]
int v6; // [esp+2Ah] [ebp-42h]
int v7; // [esp+2Eh] [ebp-3Eh]
__int16 v8; // [esp+32h] [ebp-3Ah]
int v9; // [esp+34h] [ebp-38h]
int v10; // [esp+38h] [ebp-34h]
int v11; // [esp+3Ch] [ebp-30h]
int v12; // [esp+40h] [ebp-2Ch]
int v13; // [esp+44h] [ebp-28h]
int v14; // [esp+48h] [ebp-24h]
int v15; // [esp+4Ch] [ebp-20h]
int v16; // [esp+50h] [ebp-1Ch]
int v17; // [esp+54h] [ebp-18h]
int v18; // [esp+58h] [ebp-14h]
unsigned int v19; // [esp+5Ch] [ebp-10h]
v1 = 38;
v2 = (char *)&v18 + 2;
v9 = 1279407662;
v10 = 987807583;
v19 = __readgsdword(0x14u);
v11 = 1663091624;
v12 = 482391945;
v13 = 683820061;
v14 = 235072895;
v15 = -1735432611;
v16 = 382777269;
v17 = -67599539;
v18 = 4670209;
v5 = 1819043144;
v6 = 1750081647;
v7 = 829318448;
v8 = 120;
do
{
v3 = *v2--;
v2[1] = (*((_BYTE *)&v5 + v1-- % 13) ^ (v3 + 1 - *v2)) - 1;
}
while ( v1 );
LOBYTE(v9) = (v9 ^ 0x48) - 1;
result = (int)(*a1)->NewStringUTF(a1, (const char *)&v9);
if ( __readgsdword(0x14u) != v19 )
sub_4B0();
return result;
}
この鶏肉料理は私が早期復帰のCのコンパイルが不可能であると先生が、私はそれは、書くの動的デバッグを参照しようとするが何であるかを知らないことを学んだのコードの大塊のために非常に悪いです。
動的なデバッグを学習の次の波。
継続します------ ---------