发新帖

Assembly-CSharp.dll解密

[复制链接]
12506 3
第一部分
在libmono.so的mono_image_open_from_data_with_name
顺藤摸瓜找到 mono_image_open_from_data_with_name_0



mono_image_open_from_data_with_name_0第一条指令,改成无限循环(用winhex)


003DE1F8  F0 47 2D E9  --> FEFFFFEA


并在IDA中事先下好如上图中一样的断点,


然后运行游戏,用IDA挂在目标,


并按F9运行


之后打开断点列表,






双击断点,这样就能快速来到函数 mono_image_open_from_data_with_name_0处


来到 mono_image_open_from_data_with_name_0(003DE1F8 )第二条指令,无限循环处,,


在IDA中修改内存,



把mono_image_open_from_data_with_name_0第一条指令的无限循环 还原回去,


003DE1F8  FE FF FF EA    -->  F0 47 2D E9   



之后,反复多次的按F9运行,


mono_image_open_from_data_with_name_0的第一个参数的r0,代表着目标buffer,第二个参数r1代表着buffer的大小



在第一次断点触发暂停后,程序停在了mono_image_open_from_data_with_name_0的第二条指令,跟人r0所指向的内存,如果是MZ开头的,


那么就不用关心本次解密,


如果不是MZ开头的,再按一下F9,程序会在第二个断点处断下,此时解密完成,


用ida脚本dump下来,即可


第二部分
dump下来之后还需要完成修复



其实就是IMAGE_DATA_DIRECTORY    MetaData;

中的第一个字段lSignature结构不是'BSJB'造成的






-----------------------------------------------------------
快速定位:
把目标dll拖入LoadPE



记录下MetaData的数值


MetaData                      0x001A7558 0x001C752C


0x001A7m

0x001C752C是MetaData结构的大小



点击“区段”记录下pe的区段信息



.text
00002000
0036CA84
00000200
0036CC00

发现MetaData在内存中的RVA(0x001A7558)落在.text段




根据.text段信息计算,MetaData数据在文件中的偏移:  001A7558-00002000+00000200=1A5758




用winhex打开目标dll


来到1A5758偏移处,修改数据为:'BSJB'


如下图




保存后,IDA已经识别。


















举报 使用道具

回复

精彩评论3

13286747386    发表于 2015-9-30 15:40:40 | 显示全部楼层
膜拜大牛,后面修复RSJB签名的简直亮瞎我小白的眼,学习了~

举报 使用道具

回复 支持 反对
图灵    发表于 2015-10-15 09:41:33 | 显示全部楼层
修复RSJB签名用010edit,导入c# dll结构直接找到RSJB的位置,一般人我不告诉他

举报 使用道具

回复 支持 反对
听鬼哥说故事    发表于 2015-10-15 09:46:49 | 显示全部楼层
修复过程不错,不过目前还没遇到那样的东西,留下做个记录保存下。

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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