国产精品久av福利在线观看_亚洲一区国产精品_亚洲黄色一区二区三区_欧美成人xxxx_国产精品www_xxxxx欧美_国产精品久久婷婷六月丁香_国产特级毛片

錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務,錦州廣廈維修電腦,公司IT外包服務
topFlag1 設為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務項目 服務報價 維修流程 IT外包服務 服務器維護 技術文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務技術文章
開心消消樂lua腳本解密

作者: wmsuper  日期:2017-05-25 16:07:33   來源: 本站整理

本帖最后由 wmsuper 于 2017-5-25 15:31 編輯

0x01 定位
開心消消樂lua的解析引擎在libhegame.so中,用IDA分析,發現很多函數并沒有符號,包括所使用的OpenSSL和Lua的第三方庫,增加了逆向的難度。
不過字符串并沒有加密,可以通過查找".lua" "load" 這些字符串找到關鍵地方,通過字符串可以快速定位到加載lua文件的地方。
[C] 純文本查看 復制代碼
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
void __fastcall lua_load(int a1)
{
  int v1; // r0@1
  int v2; // r3@1
  int *v3; // r0@3
  int v4; // r0@3
  signed int v5; // r7@3
  int v6; // r0@4
  int v7; // r0@6
  int v8; // r5@6
  int v9; // r6@12
  int v10; // r5@12
  int v11; // r0@15
  int v12; // r4@15
  int v13; // r5@17
  int v14; // r4@18
  int v15; // r5@7
  int v16; // r0@30
  int v17; // r6@30
  int v18; // r0@30
  int v19; // r0@30
  int v20; // r0@30
  int v21; // r0@30
  int v22; // r0@30
  int v23; // r0@30
  int v24; // r0@30
  int v25; // r6@30
  int v26; // r0@30
  int v27; // r0@31
  int v28; // r0@31
  int *v29; // r0@33
  const char *v30; // r1@33
  int v31; // r0@16
  int buf; // [sp+8h] [bp-108h]@4
  int v33; // [sp+Ch] [bp-104h]@3
  int v34; // [sp+10h] [bp-100h]@1
  int v35; // [sp+1Ch] [bp-F4h]@1
  char v36; // [sp+20h] [bp-F0h]@2
  int v37; // [sp+24h] [bp-ECh]@3
  char v38; // [sp+28h] [bp-E8h]@3
  char v39; // [sp+2Ch] [bp-E4h]@3
  char v40; // [sp+30h] [bp-E0h]@3
  int v41; // [sp+34h] [bp-DCh]@3
  unsigned int len; // [sp+38h] [bp-D8h]@6
  int v43; // [sp+3Ch] [bp-D4h]@18
  int out; // [sp+40h] [bp-D0h]@3
  int v45; // [sp+44h] [bp-CCh]@1
  char v46; // [sp+48h] [bp-C8h]@32
 
  v34 = a1;
  v1 = sub_30E100();
  sub_30D100((int)&v35, v1, (int)&v45);
  v2 = sub_30D6B0(&v35, ".lua", 0);
  if ( v2 == *(_DWORD *)(v35 - 12) - 4 )
  {
    sub_30D610(&v36, &v35, 0, v2);
    sub_30D300(&v35, &v36);
    sub_30D130((int)&v36);
  }
  sub_30D100((int)&v38, (int)".", (int)&out);
  sub_30D100((int)&v39, (int)"/", (int)&v45);
  sub_7011C(&v40, &v35, &v38, &v39);
  v3 = (int *)sub_30D140(&v40, ".lua");
  v37 = *v3;
  *v3 = (int)&unk_3F3A68;
  sub_30D130((int)&v40);
  sub_30D130((int)&v39);
  sub_30D130((int)&v38);
  v4 = sub_74CD8(&v41, "src/", &v37);
  v33 = 2;
  v5 = 0;
  do
  {
    v6 = sub_1219BC(v4);
    buf = (*(int (**)(void))(*(_DWORD *)v6 + 16))();
    if ( buf )
    {
      v7 = sub_656EC();
      v8 = len;
      if ( v7 )
      {
        sub_74CD8(&v45, "@", &v37);
        v15 = sub_30E110(v34, buf, v8, v45);    // 讀取lua文件
        sub_30D130((int)&v45);
        if ( v15 )
          v5 = 3;
      }
      else if ( len <= 0x10 )      //這里可以知道這個變量是文件的長度
{
        sub_68908("load_lua", "can not get enough file data of %s", v41);
        v5 = 5;
      }
      else
      {
        if ( !(dword_3E730C & 1) && sub_30D150(&dword_3E730C) )
        {
          byte_3E7310 = 0xE9u;
          byte_3E7311 = 0x74;
          byte_3E7313 = 0x92u;
          byte_3E7314 = 0xCCu;
          byte_3E7315 = 0x32;
          byte_3E7316 = 0x2E;
          byte_3E7319 = 0x2E;
          byte_3E731A = 0x7C;
          byte_3E731B = 0x34;
          byte_3E731C = 0x51;
          byte_3E731D = 0xD7u;
          byte_3E7312 = 0x7D;
          byte_3E7317 = 0x7D;
          byte_3E731E = 0xB3u;
          byte_3E7318 = 0x11;
          byte_3E731F = 0x6A;
          sub_30D160((int)&dword_3E730C);
        }
        v9 = len - 16;
        out = 0;
        v45 = 0;
        v10 = aes_cbc_decrypt((int)&byte_3E7310, buf, buf + 16, len - 16, &out);// 第一個參數為key aes解密 IV為文件開頭的16個字節
        if ( v10 || (v10 = aes_cbc_decrypt((int)&byte_3E7310, buf, buf + 16, v9, &out)) != 0 )
        {
          zib_decompress(out, v10, (const void **)&v45);// 解壓縮
          v12 = v11;
          if ( v11 || (zib_decompress(out, v10, (const void **)&v45), (v12 = v31) != 0) )
          {
            v13 = v45;
            if ( v12 > 3 && *(_BYTE *)v45 == 0xEF && *(_BYTE *)(v45 + 1) == 0xBB && *(_BYTE *)(v45 + 2) == 0xBF )
            {
              v13 = v45 + 3;
              v12 -= 3;
              sub_688EE("load_lua", "%s with utf-8 bom", v37);
            }
            sub_74CD8(&v43, "@", &v37);
            v14 = sub_30E110(v34, v13, v12, v43);
            sub_30D130((int)&v43);
            if ( v14 )
              v5 = 3;
          }
          else
          {
            v5 = 2;
          }
        }
        else
        {
          v5 = 1;
        }
        if ( v45 )
        {
          sub_30D490(v45);
          return;
        }
        if ( out )
          sub_30D490(out);
      }
      sub_30D490(buf);
      if ( !v5 )
        goto LABEL_44;
    }
    else
    {
      v4 = sub_68908("load_lua", "can not get file data of %s", v41);
      v5 = 4;
    }
    v33 = (v33 - 1) & 0xFF;
  }
  while ( v33 );
  if ( v5 )
  {
    v16 = sub_1219BC(v4);
    (*(void (__fastcall **)(int *, int, int))(*(_DWORD *)v16 + 28))(&v43, v16, v41);
    sub_30D6D0(&v45, 16);
    v17 = sub_30D690(&v45, "error loading module ");
    v18 = sub_30D790(v34, 1, 0);
    v19 = sub_30D690(v17, v18);
    v20 = sub_30D690(v19, " from file ");
    v21 = sub_30D690(v20, v43);
    v22 = sub_30D690(v21, ":\n\t");
    v23 = sub_30D690(v22, "fileSize:");
    v24 = sub_30E120(v23, len);
    v25 = sub_30D690(v24, "\n\tmessage: ");
    v26 = sub_30D790(v34, -1, 0);
    sub_30D690(v25, v26);
    switch ( v5 )
    {
      case 1:
      case 5:
        sub_30D690(&v45, ", decrypt error");
        v27 = sub_6CA3C(v43);
        v28 = sub_B1C10(v27);
        (*(void (**)(void))(*(_DWORD *)v28 + 12))();
        goto LABEL_32;
      case 2:
        v29 = &v45;
        v30 = ", uncompress error";
        break;
      case 3:
        v29 = &v45;
        v30 = ", load buff error";
        break;
      default:
        v29 = &v45;
        v30 = ", unknown error";
        break;
    }
    sub_30D690(v29, v30);
LABEL_32:
    sub_30D590(&out, &v46);
    sub_30E130(v34, out);
  }
LABEL_44:
  sub_30D130((int)&v41);
  sub_30D130((int)&v37);
  sub_30D130((int)&v35);
}


0x02 分析
調用的算法需要進行分析,原文件中并沒有aes_cbc_decrypt和zib_decompress這兩個符號,這是需要自己去分析函數功能,這個so調用了大量的第三方庫的接口,加密算法也是調用
OpenSSL的,所以只要熟悉下這些庫的接口,可以很方便確定加解密函數的功能和參數。
跟進aes_cbc_decrypt這個函數,有很明顯的調試字符串,就可以馬上確定所調用的是哪一個OpenSSL函數。(注:函數名稱是加上去的)
 

很快的就能確定函數原型為aes_cbc_decrypt(char*key,char*iv,char*inbuf,int inlen,char**outbuf);
于是可以推出key和iv的來源,很明顯key就是上面那一串密鑰,注意2和3參數,相差16,于是可以推出來IV就是文件的開頭16個字節
 

------------------------------------------------------------------------------------------------------------------
跟進zib_decompress這個函數,1.2.8可以確定用了zlib的inflateInit(strm),第一個參數v15就是zib_decompress函數的第一個參數a1,也就是說aes解密完成
就直接開始解壓,中間沒進行額外的處理。
 


 
0x03 解密算法編寫
從上面的分析可以知道,lua文件經過aes_cbc解密之后再進行解壓,解密算法如下:
[Python] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
def decdata(c):
    key='\xe9\x74\x7d\x92\xcc\x32\x2e\x7d\x11\x2e\x7c\x34\x51\xd7\xb3\x6a'
    iv=c[0:16]
    main_data=c[16:]
    cryptor = AES.new(key,AES.MODE_CBC,iv)
    pad_compress_data=cryptor.decrypt(main_data)
    str_len=len(pad_compress_data)
    pad=ord(pad_compress_data[-1])
    compress_data=pad_compress_data[0:str_len-pad]
    plain_text = zlib.decompress(compress_data)
    return plain_text



0x04 加密方案評價
1.編寫程序的時候由于過多的留下調試字符串導致程序容易被逆向(要利用#define DEBUG控制代碼編譯,release版的程序不應該包含這些字符串)
2.過多的利用第三方開源加密庫。開發者是比較喜歡使用別人造好的輪子,但是也給帶來安全性問題。
3.從解密出來的lua來看,消消樂的lua腳本沒經過編譯,這就導致了源碼泄露。


熱門文章
  • 機械革命S1 PRO-02 開機不顯示 黑...
  • 聯想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數和判...
  • IIS 8 開啟 GZIP壓縮來減少網絡請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機始終停留在開機界面...
  • 常見打印機清零步驟
  • 安裝驅動時提示不包含數字簽名的解...
  • 共享打印機需要密碼的解決方法
  • 圖解Windows 7系統快速共享打印機的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務區域: 遼寧錦州市區
    主要業務: 修電腦,電腦修理,電腦維護,上門維修電腦,黑屏藍屏死機故障排除,無線上網設置,IT服務外包,局域網組建,ADSL共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    av网在线播放| 激情久久av一区av二区av三区| 色视频在线观看免费| 欧美丰满艳妇bbwbbw| 日韩成人精品视频在线观看| 亚洲国产精品久久久久婷婷老年| 91夜夜揉人人捏人人添红杏| 久久久综合av| 日韩在线中文字| 日韩av一区在线观看| 欧美精品亚洲二区| 欧美性猛片xxxx免费看久爱| 亚洲国产成人tv| 亚洲人成亚洲人成在线观看图片 | 日韩有码欧美| 黄色片网站在线| 一级片视频在线观看| 亚洲欧美另类日本| 亚洲精品国产一区黑色丝袜| 久久99精品波多结衣一区| 久久午夜鲁丝片午夜精品| 美女三级黄色片| 亚洲欧洲综合网| 稀缺小u女呦精品呦| www.com黄色片| www欧美激情| 乱妇乱女熟妇熟女网站| 欧美黄网站在线观看| 成人国产1314www色视频| 国产精品网站视频| 国产精品福利在线观看网址| 日本精品久久久久影院| 国产精品视频大全| 亚洲在线第一页| 国产一区二区久久精品| 日韩精品在线观看网站| 亚洲男人天堂久| 亚洲精品久久7777777| 亚洲国产精品va| 亚洲天堂av图片| 久久精品2019中文字幕| 欧美激情在线观看| 国产黑人绿帽在线第一区| 国产精品678| www.日本三级| 日本老熟妇毛茸茸| 亚洲一级片av| 久久中文字幕精品| 日韩视频在线观看一区| 黄色av免费观看| 国产精品伦一区二区三区视频| 黄网站网址视频| 午夜丝袜av电影| 免费看美女视频在线网站| 福利视频电影| 中文字幕日产av一二三区| 国产二区视频在线观看| 三级资源在线| 日本免费一区二区视频| 欧美aaaaaaaaaaaa| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品12区| 中文字幕第一区二区| 一区二区三区在线观看视频| 午夜精品久久久久久久四虎美女版| 欧美一卡二卡三卡| 这里有精品可以观看| 韩国一区二区三区视频| 久草成人资源| 一卡二卡三卡视频| 日本电影在线观看| bt天堂新版中文在线地址| 久久国产精品99国产| 欧美xxxx黑人| 伊人影院久久| 国产探花在线观看视频| 久久大逼视频| 国产aⅴ一区二区三区| 性一爱一乱一交一视频| 18黄暴禁片在线观看| 欧美成人免费全部| 美女色狠狠久久| aaaaa级少妇高潮大片免费看| 成人aaaa免费全部观看| 尤物国产在线观看| 午夜欧美激情| 日本免费在线观看视频| 手机精品视频在线观看| 久久久蜜桃一区二区| ww亚洲ww在线观看国产| 天堂电影院在线| 久久国产精品久久久| 91在线免费视频| 亚洲成人一二三区| 久久婷婷国产综合国色天香| 日韩欧美中文视频| 免费成人av电影| 国产精品精品视频| 青青在线视频免费观看| 精品国产一区二区精华| 黄色小视频在线免费看| 国产精品久久久久久久岛一牛影视 | 成人动漫av在线| 在线视频国产区| 欧美深夜福利视频| 一二三区不卡| 亚洲自拍偷拍图| 国产亚洲欧洲黄色| 国产精品亚洲综合色区韩国| 国产高潮流白浆喷水视频| 久久久99久久精品女同性| 激情文学一区| 国产一级性片| 日本一区二区在线视频观看| **女人18毛片一区二区| 黄色录像一级片| 国产日韩欧美精品| 在线观看国产精品入口| 欧洲vodafonewi精品| 国产精品久久久久久久久动漫 | 中国黄色录像片| 久久久久久毛片| 天堂av在线| 伊人75在线| 一级免费黄色录像| 日韩aⅴ视频一区二区三区| 亚洲亚洲精品在线观看| 天天干人人干| 亚洲精品二区| 在线视频欧美精品| 国产黄大片在线观看画质优化| 精品国产一区二区三区免费| 国产做a爰片久久毛片| wwwxxx亚洲| 日韩在线观看免费高清| 成人午夜精品| 成人影视免费观看| 亚欧无线一线二线三线区别| 99精品国产高清在线观看| 色欧美乱欧美15图片| 亚洲热app| 中文字幕在线观看精品| 欧美华人在线视频| 国产黄在线播放| www.com亚洲| 色男人天堂av| 992tv成人免费观看| 欧美极品欧美精品欧美视频| 一区二区三区蜜桃| 丝袜国产免费观看| 新天堂中文资源官网在线观看| 在线视频日本亚洲性| 国产美女一区视频| 无遮挡亚洲一区| 欧美男男gaygay1069| 久久香蕉精品视频| 91九色蝌蚪成人| 久久性色av| 在线成人av观看| 99精品视频播放| 欧美夫妻性视频| 亚洲青青青在线视频| 亚洲国产精品久久久久蝴蝶传媒| 91福利在线视频| 欧美风情第一页| 欧美性大战久久久久久久| 午夜欧美视频| 国产精品xxx电影| 中字幕一区二区三区乱码| 国产另类第一区| 欧美一级二级三级乱码| 欧美综合视频| 在线观看毛片网站| 国产精品久久久久久一区二区| 亚洲免费在线观看| 激情亚洲综合网| 国产精品九九九| 一区二区黄色| 日本系列第一页| 亚洲高清一区二区三区| 欧美三区美女| 一级片中文字幕| 国产日韩欧美精品在线观看| 亚洲美女视频在线观看| 成人av资源电影网站| 日皮视频在线观看| 美女高潮网站| 中文字幕一二三四| 久久久久亚洲av无码麻豆| 国产精品xxx在线观看www| 99精品视频在线观看免费| 日韩精品一二| 国产永久免费| 精品久久久久久中文字幕2017| 337p日本欧洲亚洲大胆色噜噜| 国产女人aaa级久久久级| 蜜桃在线视频| 五月天婷婷导航| 一区二区黄色片| 牛夜精品久久久久久久|