欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]《我叫mt》数据包解包记录

[原创]《我叫mt》数据包解包记录

把自己Blog上的一篇文章转过来,V1.6 V2.5 通用
关于GDB部分,不懂的请看虫大的《android软件安全与逆向分析》
=============================================
== From: blog.breeze356.com
《我叫MT online》使用的是开源项目npk(https://github.com/lqez/npk),想要解包data.dat,需要得到key,步骤记录如下,以备忘。
1. 开启Android JIT Debugging

setprop debug.db.uid 32767

启用Just-in-time debugging, pid 小于32767的进程(apk的进程号>10000),在crash之后,自动等待gdb附加调试。
2. 准备LogCat
用数据线连上手机,打开Eclipse,打开DDMS,选中手机,查看LogCat输出信息。
3. 修改libgame.so
找到/data/data/com.locojoy.punchbox.immt_a_chs/lib/libgame.so,下载到电脑,用ida打开,找到函数
__npk_package_open
对比源码
NPK_RESULT __npk_package_open( NPK_PACKAGEBODY* pb, const NPK_CHAR* filename, long filesize, NPK_TEAKEY teakey[4] )

{

    ...

     if( teakey == NULL )

        {

            return ( npk_error( NPK_ERROR_NeedSpecifiedTeaKey ) );

        }

        memcpy( pb->teakey_, teakey, sizeof(NPK_TEAKEY) * 4 ); // 如果在memcpy处crash,[R1] 即为 key[0]

    ...

}

找到汇编码
.text:003557BA 20 1C        MOVS    R0, R4

.text:003557BC 1C 30        ADDS    R0, #0x1C       ; dest

.text:003557BE 0A 99        LDR     R1, [SP,#0x270+src] ; src

.text:003557C0 10 22        MOVS    R2, #0x10       ; n

.text:003557C2 0C F6 60 EF  BLX     memcpy

将
.text:003557C2 0C F6 60 EF  BLX     memcpy

修改为
.text:003557C2 00 25        MOVS    R5, #0

.text:003557C4 2D 68        LDR     R5, [R5]

最好自己写个lib,在这个地方下个hook,这里就简单修改一下为了让程序crash
4. Crashing
将修改后的libgame.so覆盖/data/data/com.locojoy.punchbox.immt_a_chs/lib/libgame.so,启动游戏,LogCat将输出以下信息:
06-13 16:13:13.320: I/DEBUG(934): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

06-13 16:13:13.320: I/DEBUG(934): Build fingerprint: 'KONKA/sprdroid_base/hsdroid:2.3.5/MocorDroid2.3.5/W12.20_P8_20120823.110032:user/test-keys'

06-13 16:13:13.320: I/DEBUG(934): pid: 19585, tid: 19594  >>> com.locojoy.punchbox.immt_a_chs <<<

06-13 16:13:13.320: I/DEBUG(934): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000

06-13 16:13:13.320: I/DEBUG(934):  r0 0044613c  r1 44de0838  r2 00000010  r3 44de0838

06-13 16:13:13.320: I/DEBUG(934):  r4 00446120  r5 00000000  r6 81cb5f3c  r7 00000001

06-13 16:13:13.320: I/DEBUG(934):  r8 44de0b68  r9 44ce0f30  10 44ce0f1c  fp 802a5368

06-13 16:13:13.320: I/DEBUG(934):  ip 81718e84  sp 44de05a8  lr 81355765  pc 8135579c  cpsr 40800030

......

06-13 16:13:13.470: I/DEBUG(934): ********************************************************

06-13 16:13:13.470: I/DEBUG(934): * Process 19585 has been suspended while crashing.  To

06-13 16:13:13.470: I/DEBUG(934): * attach gdbserver for a gdb connection on port 5039:

06-13 16:13:13.470: I/DEBUG(934): *

06-13 16:13:13.470: I/DEBUG(934): *     adb shell gdbserver :5039 --attach 19585 &

06-13 16:13:13.470: I/DEBUG(934): *

06-13 16:13:13.470: I/DEBUG(934): * Press HOME key to let the process continue crashing.

06-13 16:13:13.470: I/DEBUG(934): ********************************************************

5. GDB下获取Key
在手机端
./gdbserver :5039 --attach 19585 &

在PC端
> adb forward tcp:5039 tcp:5039

> arm-linux-androideabi-gdb.exe

GNU gdb (GDB) 7.3.1-gg2

Copyright (C) 2011 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "--host=x86_64-pc-mingw32msvc --target=arm-linux-android".

For bug reporting instructions, please see:

<http://source.android.com/source/report-bugs.html>.

(gdb) target remote localhost:5039

(gdb) p *(0x44de0838)

6: *(0x44de0838) = 1934745265

(gdb) p *(0x44de0838 + 4)

7: *(0x44de0838 + 4) = 1934745265

(gdb) p *(0x44de0838 + 8)

8: *(0x44de0838 + 8) = 66285981

(gdb) p *(0x44de0838 + 0xc)

9: *(0x44de0838 + 0xc) = 1671953521

根据LogCat信息 得知crash时 r1 = 0x44de0838
命令 p 打印出

key[0] = 1934745265

key[1] = 1934745265

key[2] = 66285981

key[3] = 1671953521

6. 解压
至此, key已经找出来了,修改npk源码
#define NPK_SIGNATURE                   "LJPK"

编译出npk.exe,解压
D:\breezeMT\data>..\npk ..\data.dat -export *.* --k 1934745265:1934745265:66285981:1671953521

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功