吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 30072|回复: 44
收起左侧

[Android 分享] unity3D游戏的Assembly-CSharp-firstpass.dll代码解密

  [复制链接]
tongtong123 发表于 2017-8-30 21:57
本帖最后由 tongtong123 于 2017-8-30 22:16 编辑

最近想分析某游戏,发现是用unity3D开发的;解压apk,在assets\bin\Data\Managed下有Assembly-CSharp-firstpass.dll,游戏的代码就是在这里,是用C#开发的。
Reflector软件打开,结果发现打不开,是加密的。
1.png
通过借鉴这篇文章http://www.xuanyusong.com/archives/3553apk压缩包找到lib\armeabi-v7a\libmono.so,用IDA打开,定位到mono_image_open_from_data_width_name方法,
即可找到解密函数,如下图。
2.png
根据分析的解密函数,就可以对Assembly-CSharp-firstpass.dll进行解密啦,这里我用Java代码读取Assembly-CSharp-firstpass.dll进行解密。
3.png
解密后就可以用Reflector打开了,就可以进行分析了。

4.png

免费评分

参与人数 13吾爱币 +21 热心值 +13 收起 理由
tjx199802 + 1 + 1 提取DLL的工具可以发一份吗
693613898 + 1 + 1 我很赞同!
899200 + 1 + 1 谢谢楼主的教程,小白看不懂
qtfreet00 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
aa38123 + 1 + 1 热心回复!
Ganle-Yan + 1 + 1 666
gunxsword + 1 + 1 谢谢@Thanks!
searchjack + 1 + 1 鼓励转贴优秀软件安全工具和文档!
95535916 + 1 + 1 谢谢@Thanks!
PSNO + 1 + 1 我很赞同!
long9 + 1 + 1 用心讨论,共获提升!
xuanle6 + 1 + 1 热心回复!
qaz003 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

linfengtai2008 发表于 2017-11-9 13:38
int __fastcall mono_image_open_from_data_with_name(char *a1, size_t a2, int a3, signed int *a4, char a5, int a6)
{
  int v6; // r9@1
  char *v7; // r5@1
  size_t v8; // r6@1
  signed int *v9; // r7@1
  char *v10; // r3@4
  unsigned int v11; // r2@6
  unsigned int v12; // t1@6
  signed int v13; // r3@10
  char *v14; // r0@13
  char *v15; // r4@13
  int v16; // r0@18
  char v17; // r3@18
  int v18; // r4@18
  int v19; // r0@19
  int v20; // r0@21
  int v21; // r3@21
  size_t v23; // [sp+4h] [bp-24h]@1

  v23 = a2;
  v6 = a3;
  v7 = a1;
  v8 = a2;
  v9 = a4;
  g_log(0, 16, "unity: read dll:%s", a6);
  if ( *v7 == 89 )
  {
    g_log(0, 16, "decode dll name: %s lenth %d \n", a6, v8, v23);
    v10 = v7;
    while ( v10 != &v7[v8] )
    {
      v12 = (unsigned __int8)*v10++;
      v11 = v12;
      if ( !(v12 & 0x80) )
        *(v10 - 1) = 8 * v11 & 0x7F | (v11 >> 4);
    }
  }
  if ( !v8 )
  {
    if ( !v9 )
      return 0;
    v13 = 3;
    goto LABEL_16;
  }
  if ( !v6 )
    goto LABEL_18;
  v14 = (char *)g_malloc(v8);
  v15 = v14;
  if ( v14 )
  {
    memcpy(v14, v7, v8);
    v7 = v15;
LABEL_18:
    v16 = g_malloc0(872);
    v17 = *(_BYTE *)(v16 + 16);
    v18 = v16;
    *(_DWORD *)(v16 + 8) = v7;
    *(_DWORD *)(v16 + 12) = v8;
    *(_BYTE *)(v16 + 16) = v17 & 0xFD | 2 * (v6 & 1);
    if ( a6 )
      v19 = g_strdup(a6);
    else
      v19 = g_strdup_printf("data-%p", v7);
    *(_DWORD *)(v18 + 20) = v19;
    v20 = g_malloc0(396);
    v21 = (unsigned __int8)(*(_BYTE *)(v18 + 16) & 0xF7) | 8 * (a5 & 1);
    *(_DWORD *)v18 = 1;
    *(_BYTE *)(v18 + 16) = v21;
    *(_DWORD *)(v18 + 44) = v20;
    if ( do_mono_image_load(v18, v9) )
      return register_image();
    return 0;
  }
  if ( v9 )
  {
    v13 = 1;
LABEL_16:
    *v9 = v13;
  }
  return 0;
}
这个是解密函数吗
.·.·. 发表于 2018-9-19 00:14
复制……粘贴……找不到
定睛一看,with我懂,width是啥:)

通过借鉴这篇文章http://www.xuanyusong.com/archives/3553,在apk压缩包找到lib\armeabi-v7a\libmono.so,用IDA打开,定位到mono_image_open_from_data_width_name方法,

多了一个d
 楼主| tongtong123 发表于 2017-8-30 22:00
本帖最后由 tongtong123 于 2017-8-30 22:18 编辑

第一次发帖,上传个图片搞好久!!!
艾莉希雅 发表于 2017-8-30 22:29
il2cpp越来越多
用mono的强度慢慢也越来越大
比如说……日服的fgo就挺适合练手的(笑
gunxsword 发表于 2017-8-30 23:48
感谢分享,正学习这方面的东西,多谢!
第C君 发表于 2017-8-31 00:10
学习学习hhhhh
安卓iphone 发表于 2017-8-31 00:24
我很赞同!
lingbowen888 发表于 2017-8-31 01:34
最近在搞u3d的脱机,mark一下,以后也许用得到。
北海巡洋舰 发表于 2017-8-31 07:31
给楼主一点支持
ps122 发表于 2017-8-31 08:32
如何用解密函数解密dll,能再详细点吗。谢谢
henry1118 发表于 2017-8-31 08:56
感谢分享。可以看代码了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 22:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表