首页
论坛
专栏
课程

[原创]关于手游王朝崛起调试破解心得分享

ysun 2018-7-21 16:16 2918

前提:近日我的一个好朋友安利了一款游戏,说是在删档内测,我跟着一起玩了一下,感觉还是不错的。顺便也试着研究了一波~

先向大家说明一下-根据目前的测试来看,虽然显示的金额改变了,但是毕竟是联网的游戏,在花费金子锻造升级的时候应该还是

有发包验证,大家有兴趣可以继续我的这个往下走。


-------------------------------------------------------------------------------------

友情提示:开发不易,游戏更是如此。建议大家练手娱乐就好,点到为止!

-------------------------------------------------------------------------------------


1.下载游戏安装包,拖入Android工具---Android Killer,查看相关结构及加密情况



根据反编译的信息和结构-存在libmono.so和Assembly-CSharp.dll,可以判断出是U3D开发的,并且没有加壳。


2.将libmono.so扔进IDA,反编译查看载入关键dll的相关代码即mono_image_open_from_data_with_name函数


发现了一个rvlt_modify_data_with_name()函数,跟进查看


发现了载入的dll及解密的过程,如下:

(1)对于Assembly-CSharp.dll,将每一个字节进行减去13的解密操作

(2)对于ThreeKindom.dll,将每一个字节进行加上11的解密操作,

以上两步将加密的dll进行了还原。


为了方便分析,临时写了一个解密程序(临时写的,代码结构不好,各位老爷凑活看吧)-源码贴出

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a=-1; // 0代表解码Assembly-CSharp.dll 1代表解码ThreeKindom.dll
			  // 2代表编码Assembly-CSharp.dll 3代表编码码ThreeKindom.dll
	int num=0;

	FILE *fp_1,*fp_2,*fp_3,*fp_4,*fp_5,*fp_6;

	char buf; //one byte for buffer

	char *st1="Assembly-CSharp.dll";	//dll's name
	char *st2="ThreeKindom.dll";

	char *st3="Assembly-CSharp-NewEncode.dll";	//New Encode dll's name
	char *st4="ThreeKindom.dll-NewEncode.dll";

	char *st5="Assembly-CSharp-Decode.dll";	//Decode dll's name
	char *st6="ThreeKindom.dll-Decode.dll";

	fp_1 = fopen(st1,"rb");
	fp_2 = fopen(st2,"rb");

	fp_3 = fopen(st5,"wb");
	fp_4 = fopen(st6,"wb");

	fp_5 = fopen(st3,"wb");
	fp_6 = fopen(st4,"wb");

	printf("0 - Decode Assembly-CSharp.dll \n");
	printf("1 - Decode ThreeKindom.dll \n");
	printf("2 - Encode Assembly-CSharp.dll \n");
	printf("3 - Encode ThreeKindom.dll \n");
	printf("-1 - Exit \n");
	printf("Please input number you want execute (0~3): ");
	scanf("%d",&a);

	if(fp_1 == NULL || fp_2 == NULL || fp_3 == NULL || fp_4 == NULL)
	{
		printf("Open Error ! \n");
		getchar();
		return 0;
	}

	switch(a)
	{
	case -1:
	{
		break;
	}
	case 0:
	case 1:
	{
		a==0?(num=13):(num=11);
		while(1)
		{
			if(num == 13)
			{
				buf = fgetc(fp_1);
				buf-=13;
				fputc(buf,fp_3);
				if(feof(fp_1))
				{
					break;
				}
			}
			else
			{
				buf = fgetc(fp_2);
				if(feof(fp_2))
				{
					break;
				}
				buf+=11;
				fputc(buf,fp_4);
				
			}
		}
		break;
	}
	case 2:
	case 3:
	{
		a==2?(num=13):(num=11);
		while(1)
		{
			if(num == 13)
			{
				buf = fgetc(fp_1);
				if(feof(fp_1))
				{
					break;
				}
				buf+=13;
				fputc(buf,fp_5);
			}
			else
			{
				buf = fgetc(fp_2);
				if(feof(fp_2))
				{
					break;
				}
				buf-=11;
				fputc(buf,fp_6);
			}
		}
		break;
	}
	default:
	{
		printf("Input Number Error ! \n");
		getchar();
		return 0;
	}
	}

	fclose(fp_1);
	fclose(fp_2);
	fclose(fp_3);
	fclose(fp_4);
	fclose(fp_5);
	fclose(fp_6);

	printf("Decode Finish ! \n");

	getchar();

	return 0;
}


3.将还原出的两个dll拖入Reflector,进行查看分析

加密前的dll导入后,无法识别



解密后的dll导入,可以查看结构



4.猜测关键字,找到我们需要的关键类和方法

由于我们想修改金条,所以先搜索一下gold,看一下有没有我们需要的,

经过搜索,我们找到了一个SetGoldNumber的方法,看一下实现,

发现最后面有个赋值语句,那么我们可以尝试从这个方法里动手脚。

我的思路-将赋值的num变量改为常数,这样,可以永远设置gold的

this.gold为我们设定的那个数值。



5.利用Reflector+Reflexil修改关键类


将ldarg,1 ----> ldc.i4 99999

将修改的dll保存。


6.加密并替换原apk里面的dll,重新签名打包成apk,安装测试

加密可以用我前面贴出的程序,也可以自己写,很简单,只是把

dll里面的每个字节都加上了13而已。

效果图


----------------------------------------------------------------------

附件是原apk的安装包、破解后的安装包以及我写的加解密的源代码和程序

供大家学习交流使用~

链接:https://pan.baidu.com/s/1gj5zV1BWdu-MvjJlBoJHiA 密码:14hk

(同步吾爱)



[防守篇]2018看雪.TSRC CTF 挑战赛(团队赛)11月1日征题开启!

本主题帖已收到 1 次赞赏,累计¥1.00
最新回复 (14)
godofrock 2018-7-21 23:07
2

0

如何使用程序?
ysun 2018-7-22 07:38
3

0

godofrock 如何使用程序?
把程序和你要修改的dll放在同一目录就可以了,生成的decode就是解析的;encode就是加密的。可以查看程序源代码,都有贴出
godofrock 2018-7-22 07:57
4

0

ysun 把程序和你要修改的dll放在同一目录就可以了,生成的decode就是解析的;encode就是加密的。可以查看程序源代码,都有贴出
thanks
白菜大哥 2018-7-23 03:32
5

0

看了下游戏,有种山寨的气息。。。
ysun 2018-7-23 07:59
6

0

白菜大哥 看了下游戏,有种山寨的气息。。。
我感觉玩着还好
Vn小帆 2018-7-23 22:28
7

0

山寨版  王者荣耀?
程式狂人 2018-7-27 14:43
8

0

你的連結APK已經沒辦法下載
打瞌睡肯定 2018-7-29 01:22
9

0

13943539046
打瞌睡肯定 2018-7-29 01:22
10

0

是的史莱克
的来看待了 2018-7-29 01:23
11

0

当升科技
的来看待了 2018-7-29 01:23
12

0

nohackxu 2018-7-30 18:22
13

0

楼主,66666。
聖blue 2018-7-30 23:31
14

0

疯鱼 2018-9-5 21:59
15

0

楼主能否助我破解一个同样的U3D游戏,是棋牌类的,回馈丰厚,老衲的Q1849282746
返回