导航:首页 > 源码编译 > 反编译掌机版

反编译掌机版

发布时间:2023-07-27 02:11:56

① 如何实现APK的反编译得到APK的源码

最新的反编译不用此方法, 有最新的一键自动反编译工具:

这段时间在学android应用开发,在想既然是用java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。

在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。

注:本Android反编译教程,在Windows7-Ultimate-64bit操作系统上,测试通过!

下述所需的反编译工具包 下载

一、反编译Apk得到Java源代码
首先要下载两个工具:dex2jar和JD-GUI

前者dex2jar是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:

dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

具体步骤:

首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;

解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录(在DOS命令下CD 目录)

运行

dex2jar.bat classes.dex

生成

classes.dex.dex2jar.jar

生成jar文件的截图如下:

运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了

HelloAndroid源码(编译前的apk源码对照)如下:

二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件

如果是汉化软件,这将特别有用。首先还是下载工具,这次用到的是apktool

下载地址:http://code.google.com/p/android-apktool/downloads/list

下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)

具体步骤:

将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar

在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:

命令行解释:apktool d [apk文件 ] [输出文件夹]

反编译的文件如下(AndroidManifest.xml为例):

特别注意:你要反编译的文件一定要放在C盘的根目录里(其实不用放在C盘根目录也行)

例如:在D盘目录D:\apktool1.4.1

cd /d D:\apktool1.4.1 //切换到D盘目录,包含HelloAndroid.apk以及aapt.exe,apktool.bat,apktool.jar三个文件

apktool.bat d -f HelloAndroid.apk HelloAndroid // apktool反编译命令,注意 d和
-f 的写法

将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:这个主意你文件所在盘

打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok

最后,再介绍一款刚出来的反编译工具 Androidfby ,它是一款对上述步骤进行了封装的图形界面工具,下载地址

但是,针对部分签名的apk,无法实现反编译,但本博客方法则仍然可以反编译成功!仅供参考使用

另外,作为应用开发者,肯定不希望自己的代码被反编译的,下一遍博客将讲述如何通过混淆代码防止被别人反编译

Android如何防止apk程序被反编译

作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹

proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:

[html] view
plainprint?

1. -optimizationpasses 5

2. -dontusemixedcaseclassnames

3. -

4. -dontpreverify

5. -verbose

6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

7.

8. -keep public class * extends android.app.Activity

9. -keep public class * extends android.app.Application

10. -keep public class * extends android.app.Service

11. -keep public class * extends android.content.BroadcastReceiver

12. -keep public class * extends android.content.ContentProvider

13. -keep public class * extends android.app.backup.BackupAgentHelper

14. -keep public class * extends android.preference.Preference

15. -keep public class com.android.vending.licensing.ILicensingService

16.

17. -keepclasseswithmembernames class * {

18. native <methods>;

19. }

20.

21. -keepclasseswithmembernames class * {

22. public <init>(android.content.Context, android.util.AttributeSet);

23. }

24.

25. -keepclasseswithmembernames class * {

26. public <init>(android.content.Context, android.util.AttributeSet, int);

27. }

28.

29. -keepclassmembers enum * {

30. public static **[] values();

31. public static ** valueOf(java.lang.String);

32. }

33.

34. -keep class * implements android.os.Parcelable {

35. public static final android.os.Parcelable$Creator *;

36. }

从脚本中可以看到,混淆中保留了继承自Activity、Service、
Application、BroadcastReceiver、ContentProvider等基本组件以及
com.android.vending.licensing.ILicensingService,

并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。)

让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

完整的default.properties文件应该如下:

[html] view
plainprint?

1. # This file is automatically generated by Android Tools.

2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!

3. #

4. # This file must be checked in Version Control Systems.

5. #

6. # To customize properties used by the Ant build system use,

7. # "build.properties", and override values to adapt the script to your

8. # project structure.

9.

10. # Project target.

11. target=android-9

12. proguard.config=proguard.cfg

大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的:

如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可

② 反编译手机软件,怎样破解卡密

可以去除登录,就是免登录咯

③ 为什么我用show java手机版反编译出来的工程用AIDE打开会有很多错误

本文详细介绍了如何反编译一个未被混淆过的Android APK,修改smali字节码后,再回编译成APK并更新签名,使之可正常安装。破译后的apk无论输入什么样的用户名和密码都可以成功进入到第二个Activity。
有时难免要反编译一个APK,修改其中的若干关键判断点,然后再回编译成一个全新的可用的apk,这完全是可实现的。若要完成上述工作,需要以下工具,杂家后面会把下载链接也附上。这些软件截止本文发布时,经过杂家确认都是最新的版本。
1.APK-Multi-Toolv1.0.11.zip 用它来反编译apk,得到smali类型的源码和资源文件。一般来讲,直接解压缩一个apk也可以看到其资源文件,但部分xml是不可阅读的,需用此工具反编译。网上流传较广的是一个经过高人汉化过的版本1.0.3,第一次使用这个工具可以用这个汉化的版本,熟悉其命令。但经过杂家测试,这个汉化的版本再回编译apk签名时已经出问题了,签不了,最终用的最新版才ok。
2.dex2jar-0.0.9.15.zip 用于将一个apk文件转换成jar类型的文件,转换之后再利用下面的jd-gui工具才能看到其java代码。上面的apk-tool固然强大,但是反编译出来是smali文件,即dalvik字节码,类似汇编语言的一种代码,直接阅读如天书一样,为此我们需要使用dex2jar + jd-gui来得到其java代码,进行阅读找到要修改的关键点。
3.jd-gui-0.3.6.windows.zip 可以打开一个jar类型的文件,看到java代码。并能将代码保存,保存后再弄到sourceinsight里就方便看了。最好使用本文所说的最新版本,使用老版本会发现一个BActivity,如果里面有内部类,则又多出一个BActivity$1.java,类似这种文件。新版本没这个问题。
4.Smali2Java.1.0.0.558.zip 用于将smali文件转成java文件,这个工具仅仅是备用。因为用上面三个工具已经能够胜任本文的要求了。
如果第一次接触反编译,不了解smali语法,可以阅读链接1 链接2
下面杂家先上一个Android APK,用来简单模拟用户登录的情况,注意只能是模拟哈。因为正式的apk很少有在本地进行判断的。此apk要求用户输入用户名和密码,如果用户名为yanzi,密码为123,则认为合法,自动跳转到第二个Activity。否则提示用户名或密码不正确。

<span style="font-family:Comic Sans MS;font-size:18px;">package org.yanzi.decomdemo.activity;

import org.yanzi.decompiledemo.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends Activity {

EditText loginName = null;
EditText loginPswd = null;
Button loginBtn = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initUI();
loginBtn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(isAllowLogin()){
Intent intent = new Intent(LoginActivity.this, SecondActivity.class);
startActivity(intent);
LoginActivity.this.finish();
}
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.login, menu);
return true;
}
private void initUI(){
loginName = (EditText)findViewById(R.id.edit_login_name);
loginPswd = (EditText)findViewById(R.id.edit_login_pswd);
loginBtn = (Button)findViewById(R.id.btn_login);
}
private boolean isAllowLogin(){
String name = loginName.getText().toString().trim();
String pswd = loginPswd.getText().toString().trim();
if(name != null && pswd != null){
if(name.equals("") || pswd.equals("")){
Toast.makeText(this, "密码或用户名不能为空", Toast.LENGTH_SHORT).show();
return false;
}
}
if(name.equals("yanzi") && pswd.equals("123")){
return true;
}else{
Toast.makeText(getApplicationContext(), "用户名或密码不符", Toast.LENGTH_SHORT).show();
}
return false;
}

}
</span>

附上出处链接:http://blog.csdn.net/yanzi1225627/article/details/38425453

④ 谁能帮我反编译一个APK的签名和版本号。这个软件老提示更新,但是更新后会收费,很烦。

将要修改的apk重命名,如123.apk,名字不能含有汉字,如原名没有汉字可忽略;
解压“一键APKtool”,将123.apk托至该文件夹下;
点击“一键APKtool.exe”,先进行1,加载框架,然后2,反编译;
进入该文件夹找到反编译出来的123文件夹,里面找到AndroidManifest.xml
打开,第二行<manifest android:versionCode="300" android:versionName="4.0.003" ,修改版本号,如为9.9.999,保存;
然后打开“一键APKtool.exe”进行3,回编apk;
在“回编apk生成目录”便可以找到回编后的apk;
打开“ApkTool.exe”,将该apk拉到“签名那一栏”,点击签名;
等待签名成功,即可使用~

⑤ 当年的Fc《魂斗罗》《玛丽》是用什么工具做的。如何反编译。

汇编和c都可以,这里有个编程器http://pocket.92wy.com/fc_info_33534.html

任夭堂游戏编程探密(文字版)
第一章 任天堂游戏结构概论
长期以来,由于任天堂公司在技术上的封锁和国内游戏开发工具的久缺.任天堂游戏
蒙上了一层神密的面纱,中国人只能玩任天堂游戏.而不能象苹果机、中华学习机那样了解
游戏程序、自己动手编写游戏。近年来,随着任夭堂系列游戏机配套键盘的问世,逐步创造了
揭开这层面纱的条件.特别是配有打印机接口的“裕兴”、“金字塔”等高档游戏机键盘的陆续
推出,用户仅仅编写一个简单的反汇编程序就可打印出系统软件的源程序,从而为探索任天
堂游戏软件的奥秘提供了有效的手段。
有人疑问任夭堂游戏机的中央处理器同中华学习机一样也是八位的CPU.但为什么
它能够产生出如此绚丽多彩的动画、美妙动听的音响、栩栩如生的角色,其效果远远胜过美
国的“雅达利“,更强过中华学习机的游戏呢?究其原因,关键在于任天堂游戏机的设计者们
在传统的八位机上独具匠心、另辟蹊径,从硬件上进行了独创的改造,在软件上进行了大胆
的尝试,使一个CPU发挥了两个CPU的功效,产生了绝妙非凡的艺术效果.从而以物美价
廉的绝对优势迅速占领了游戏机市场,掀起了家庭娱乐领域的第三次浪潮。本文拟从分析任
天堂游戏的软、硬件特点出发,揭开任天堂游戏编程的秘密.以一与广大同好切磋。

1·1 任天堂游戏机的硬件特点

1·1·1电路原理框图
任天堂游戏机的硬件共分两部分:主要部分是游戏机.从属部分是游戏卡。游戏机提供
游戏的运行环境,游戏卡提供支持游戏的软件,其电路原理框图如图1一1。
上图中6527 CPU为中央处理器,田于它的任务是处理程序,所以一般把与它相连的部
件加以前缀"P".故CPU的地址总线表示为PADD,数据总线表示为PDATA,CPU管理的
存储器表示为PRAM,PROM等。同样.6528 PPU的任务是处理图像,所以凡与它相关的部
件均加以前缀“V”。

1·1·2 中央处理器6527 CPU
1.CPU的内部结构
6527 CPU是一个八位单片机,在它的内部除固化有6502系列的CPU外,还有一个
可编程音响发生器PSG(Programable Sound Generator)和24个八位只写寄存器,其地址空
间分配为$4000-$4017.主要用于CPU的I/O操作,PSG音响发生器的工作就是由这些
寄存器控制完成的.

1·1·4 游戏卡
1、游戏卡的基本组成
普通的单节目游戏卡一般由两片ROM或EPROM组成,ROM的容量由游戏程序量的
大小决定.最简单的任天堂游戏为24K,故这种卡内有块16K的ROM存放程序,一块
8K的ROM存图形字模(目前有软封装的IC,它把两块ROM封在一起)。典型的任天堂
游戏程序量为40K,它使用一块32K的ROM存程序、一块8K的ROM存字模。当程序量大
于40K时则要对ROM进行容量扩充.
2、游戏卡各脚的功能
游戏卡是一60脚的接插件,各脚功能见图1一4。
3、常用 ROM引脚功能简介
游戏卡中常用ROM或EPROM的型号有27C64(8 X 8K)、27C128(8X l6K)、27C256(8
X 32K), 27C512 (8 X 64 K ), 27C1000 (8 X 128K),或后缀数字相同而前缀不同的其它公
司产品,盒卡中还有2兆位(8 x 256K)至8兆位(8X 1000K)的芯片。其中27C64~27C512为28
脚的芯片,27C1000或更大容量的芯片为32脚(个别的27C1000仍为28脚,它使用了OE.
CE中的一个脚作为地址线).

1·2 任夭堂游戏软件的特点
目前流行的任夭堂游戏软件有数百种,内容已涉及及到政治、经济、军事、战争、教育、管
理、体育、娱乐等各个领域.可以说任天堂游戏已兼顾了男、女、老、中、青、少、幼各个年龄阶
层,深受世界各国人民所喜爱。也许这就是它迅速普及的主要原因。但是,任天堂游戏尽管
内容千变万化、情节各异,其软件结构和处理方法则是基本相同的,它们有着共同的特点。

1·2·1 任天堂游戏的软件结构
归纳起来,任天堂游戏软件结构可分为两大类:基本结构和扩展结构.
一、基本结构
基本的任夭堂游戏软件容分为40K字节(标准卡标注为LB)。典型游戏如,《1942》、《超
级玛丽》、《拆屋工》等.其中32k为游戏控制程序,供CPU执行;8K为图形字模,由PPU处
理。另外还有一种低配置结构,软件容量为24K{标注为LA),这是一种早期软件。其中控制
程序为16K;字模为8K。典型游戏有《火箭车》、《马戏团》、《金块Ⅰ、Ⅱ》等。
40K软件的控制程序存放地址在CPU管理的$8000一$FFFF空间;字模地址在PPU
管理的$0000-$1FFF空间。16K软件的控制程序存放地址为$C000-$FFFF;字模地
址也是$0000一$1FFF。
二、扩展结构
容量在40K以上的软件均为扩展结构。它们在基本结构的基础上或者扩展控制程序
区、或者扩展字模区。扩展方法是在某段地址范围进行空间存储体切换。一般程序区在
$8000-$BFFF空间切换;字模区在$0000-$1FFF空间切换。切换种类以软件容量的
大小略有不同:
对于48K卡(标注为LC〕,其程序部分为32K;宇模部分为16K,分两个8K存储体.
典型游戏有《七宝奇谋》、《影子传说》等。
通常把24k-48K容量的游戏卡称为低档卡或低档游戏。
对于64K卡(标注为LD)有两种结构:一种是其程序部分为32K;字模部分为32x,分
为四个8K存储体.典型游戏有《迷宫组曲》,《智慧城》、《沙罗曼蛇一代》、《北斗神拳一代》
等;第二种则是程序与字模共用64k,分为四个存储体.典型游戏有《米老鼠大冒险》、《冒险
岛》、《俄罗斯方块1、2》等。
80K的游戏不多(标注为LE),常见的有《中国拳》、《金牌玛丽》等。其程序部分为48K,
前32K分为两个16k存储体;字模部分为32k,分为四个8k存储体。
通常称64k、80K的游戏为中档卡。
对于128K卡(标注为LF),其程序部分与字模部分棍合共用128k,分为八个16K存储
体,其中前七个存储体地址映射于$8000-$BFFF:最后一个存储体(称为HOME BANK)
映射于$0000一$FFFF,典型游戏有《魔界村》、《怒》、《火之鸟方》、《未来战士》、《洛克人》、
《1943》 《1944 》《嵌特殊部队》、《冲撞霹雳机车》等。
这类游戏卡中一般都配有一块8K的RAM(动态随机存储器〕存储当前使用的字模。
对于160k卡(标注为LG),其程序部分为128K;字模部分为32K。典型游戏有《倚天屠
龙记》、《立体大赛车》、《欢乐叮当》等。
对于256K卡(标注为LH),其程序部分为128K;字模部分为128K。典型游戏有《柯拉
米世界》、《恶魔城》、《双截龙》、《松鼠历险记》《人间兵器》、《联合大作战)等。另外,还有《魂
斗罗》、《赤色要塞》、《绿色兵团》、《立体篮球》《荒野大镖客》等256K游戏被压缩为128K游
戏,目前这类游戏的256K版已不多见,常见的均为128K的压缩版;
通常称128K一256K容量的游戏为高档卡或强卡。
对于高于256K容是的游戏则称为特卡,如《不动明王传》,《战斧》、《孔雀王》,《大旋风》
等游戏容量已达2M-4M。但由于任天堂系列游戏机的CPU的处理速度、画面的分辨率、音
域音色等方面的限制,即使软件容量再增大,游戏效果也不会提高多少.总达不到街机的水
平,故目前单个游戏的容量大于256K的尚不多见。

1·3 任天堂游戏的图像处理方法
本节简要介绍任天堂游戏的图像处理方法。
1·3·1屏幕显示原理
任天堂游戏机中的CPU虽然仍属65系列的CPU,但它的显示方式与中华学习机截然
不同。其显示屏幕由三类四层显示页面钩成。三类显示页依次为:卡通(角色或动画)页、背
景页、底背景页。卡通页用于显示游戏中的角色,它有两个页面:卡通零页——使角色显示于
背景之前;卡通一页——使角色显示于背景之后。卡通员的显示分辨率为256x240点,卡通
可以点为单位移动。背景页主要用于游戏画面的显示,它共有四个显示页面,每页的两边互
相相连并排成“田”字,采取字符显示方式,显示分辨率为32列* 30行,每幅画面由$60个
图形块构成,游戏中可任取一个页面显示。底背景页主要用于大面积的单色显示,以衬托出
兰天、草地、沙漠、大海等效果,显示分辨率为1x1。 四层显示页的排列由前向后依次为:卡
通零页、背景页、卡通一页、底背景页(见图1一6)。系统默认的排列方式为背景00页与卡通
贾、底背景页四层页面重叠,前面显示页的内容可以遮住后面显示页的内容,因而很容易构
成具有一定景深次序的立体画面。

1·3·2背景处理技术
任天堂游戏中的背景画面显示采用字符方式,每个字符通常称为背景图形块。每个图
形块为8*8点阵,其字模数据存放在由PPU管理的一段内存中,称为背景字库,一般使用
$1000一$1FFF地址,共4K字节.每个字模由连续的16个单元组成,故一次最多可定义
256个字符,序号依次为0~255.显示字符时,只要把字符序号置入屏幕对应的显示单元中
即可。
任关堂游戏中的背景处理由PPU独立完成,每一个背景页面对应PPU的1024个单
元,为顺序对应关系。背景00页对应PPU地址为$2000--$23FF,其中$2000一$23BF
对应于960个图形显示单元,$23C0--23FF为该显示页的配色单元;背景10页对应的
PPU地址为$2400一$27FF;同样,后面的两页依次对应$2800---$2BFF、$2C00
$2FFF。由于游戏机中只有一块2K的VRAM(PPU使用的RAM),故一般只使用前两个
页面,通常称其为背景零页和背景一页。游戏中可通过设置软开关的方法控制画面的横、纵
向,以使两幅面面横向并列或纵向衔接。
在实际游戏中,要经常用到背景画面的横向卷动和纵向滚动。如(魂斗罗,游戏中的却
一、五、六、七、八关是横向卷动,第三关则是纵向滚动。这些画面位移效果是如何实现的呢?
我们知道,中华学习机中的画面位移是通过反复改写显示映射单元的内容而实现的,这种方
法处理速度慢、控制程序冗长。任天堂则采取了截然不同的方法。它通过硬件的待殊处理,
引入了显示窗口的概念。画面位移时,每个显示单元的内容不变,而令显示窗口向相反的方
向移动,从而实现了画面的横向卷动和纵向滚动。如《魂斗罗》中第一关横向卷动的控制方法
是.令两个背景页横向衔接,游戏开始时,背景零页绘满32列,而背景一页仅绘制12列,令
显示窗口对正零页,当游戏中的角色前进到画面右边的一定位置时,则令显示窗口右移一
格,同时绘制一页的第13列;这样,显示窗口每右移一格,画面绘制一列,从而使游戏画面连
绵不绝,每移出一页画面(32列)令页数计数器加一,当累计到一定页数时则令窗口不再移
动,进行关底处理。这一画面的位移控制极为简单,仅通过向位移软开关$2005置入移位数
据就可实现。F BASIC的控制程序为:
POKE &H2005,x:POKE &H2005,0
x为位移参数。其机器语言的控制程序为:
LDA x
STA $ 2005
LDA #$00
STA $ 2005
画面的纵向位移则更为简单,如《魂斗罗》的第三关——瀑布天险是一个纵版画面,角色要从
最底层跳升到最顶层与关底魔头决斗,游戏进程中画面随看角色的跳跃不停的上滚。实际--
这一位移过程是在一页面面中进行的,控制方法是,每当角色前进到画面上方某一位置时,
改写画面最底行的图形数据,使其为即将移入画面的一行.然后令显示窗口向上移一格,由
于窗口是在一个显示页上移动,故最底行即是最顶行(这时可把一页面面理解为上、下边连
接的圆筒,显示窗口是套在画面圆筒外面稍大的一个圆筒,窗口移动一格就是向上旋转一
格)。F BASIC控制程序为,
POKE &H2005,0:POKE &H2005,Y
Y为位移参数。相应的机器语言程序为,
LDA #$00
STA $2005
LDA Y
STA $2005
以上画面的送效、位移操作都是在CPU响应非屏蔽中断期间完成的(非屏蔽中断是在
电视机的场回扫期间发出和响应的,这时的电视屏是黑的),所以我们感觉布道位移的痕迹。
关于任天堂游戏中背景画面的绘制 移动及画面的分裂位移和扭曲等效果的实现,将在第六章详细讨论。

1·3·3动画处理技术
组成任天堂游戏中动画的最小单位是卡通块,每个卡通块为8X8点阵.与一个字符同
样大小。卡通块也有一个图形字库,对应的PPU地址为$0000-$OFFF。每个个卡通块的字
模数据也由连续的16个单元组成,故一次最多可定义256个卡通块,序号依次为0-255
6527CPU规定.在一幅画面上只允许同时显示64个8x8点阵的卡通块〔这是由PPU
内卡通定义区的RAM分配决定的〕,如《超级玛丽》中,玛丽在吃红蘑菇之前为16x16点
阵大小(即由4个卡通块组成),当吃了红蘑菇之后身体长大一倍,变为32X 32点阵(即由
16个卡通块组成〕的卡通。但实际游戏中要求显示的卡通块数往往远远超过这一限制,如目
前较流行的打斗游戏《街霸》中,一个卡通即为128*64点阵(由128个卡通块组成)有时还
更大,这是怎么实现的呢?
原来在实际游戏中,对卡通进行了分时控制。所谓分时控制就是在不同的时间里显示半
通的不同部分,依靠人眼的视觉惰性产生连续的感觉。如《魂斗罗》游戏中的卡通显示(两个
正面角色、敌人、发射的子弹、暗堡的闭合与开启都是卡通)就是每一次中断显示卡通的二分
之一实现的。
卡通的定义操作极其简单,系统规定一个卡通块由连续的四个内存单元定义,第一寸
单元指定卡通显示的Y坐标、第二个为卡通块在字库中的序号、第三个为卡通块的显示状
态〔配色组合、左右翻转、上下颠倒以及显示于那个卡通页面,,第四个为显示的X坐标。编
程中可任意指定定义卡通的内存页面(一般选二页或三页,即$200一$2FF, $300
$3FF)。
关于任天堂游戏中的卡通的定义及运动控制将在第七章讨论。

1·4 任天堂游戏的音响处理

在大部分任天堂游戏的过程始、终,一直伴奏着和谐动听的背景音乐;随岩游戏的进行
和角色的动作还不时发出逼真的效果音响,而且这些音响的发出与背景的移动、角色的运动
三者并行工作,互不干扰,许多朋友玩过中华机上的游戏,如《警察抓小偷》《富士山决战》
等,这些游戏中的音响发出与角色的动作是不能同时进行的,即角色动作时没有音响;发出
音响时角色的动作要停下来.任天堂游戏中的音响处理确有独到之处.由于在6527 CPU内
固化有可编程音响发生器,所以音响控制程序特别简洁,任天堂游戏的发声系统由五个声部
组成,对应于CPU管理的$40DO——$4013二十个单元,每个声部使用四个单元,它们的作
用依次为音色音量、音形包络、音调细调、音调粗调。第一、二、三声部可进行和声旋律演奏,
也可以选取任一声部发出效果音,如执行F BASIC程序
POKE &H4015,1:POKE &H4000. 255,255,255,255
就可发出长达三分钟的频率由低到高的警报声。第四声部可以模仿连续不断的噪声,如风
声 雨声 钟生 脚步声 火车声等等 第五声部则可模仿出人的讲话声。任天堂游戏中

背景音乐一般都是使用前三个声部演奏的,演奏程序也是放在中断中处理的.五个声部的发
声总开关由$4015控制,$4015的D0——D4位依次控制翻第一至第五声部的工作状态,置
0关闭、置1开启。

⑥ 现在PB又反编译软件吗怎么实现反编译

1、首先在PB安装目录下有个etkremov.inf,右键点击剪切走这个文件或删除。

⑦ 反编译修改Android apk的版本号

准备工作完毕后,开始反编译apk。
1.将你要反编译的apk放到apktoo.bat的同一文件夹下,然后cd到这个目录,执行以下命令:

其中debug.apk为你要反编译的apk的名字,替换一下即可

其中dst.apk为打包后生成的apk。

其中 debug.keystore 为你自己的签名文件, debug 为签名文件的 keyAlias 。
然后输入密码就行, dst_signed.apk 为签名后生成的apk文件

执行完后,出现如下命令即代表成功

⑧ 安卓app360加固怎么反编译

1 对比

上传demo进行加固,解包后对比下原包和加固包,发现加固包在assets文件夹下多了libjiagu.so,libjiagu_x86,lib文件夹下多了libjiagu_art.so,同时修改了dex文件和AndroidManifest文件

打开manifest文件,看到xxx加固对Application标签做了修改,添加了壳入口,也就是我们反编译后看到的StubApplication.smali这个文件。

相比于之前版本的加固,自从1.x.x.x加固版本之后,多了几次反调试,使得动态难度稍微增大了一些,不过针对脱壳机脱壳,再多了反调试也是无用。或者通过修改系统源码,也能达到消除反调试的作用。


2 动态调试

(1)把app安装到手机,以调试模式打开app

(2)以shell模式root权限打开IDA的android_server监听

(3)tcp转发

(4)打开IDA,修改配置为在进程开始时下断

(5)搜索到进程后jdwp转发,pid值即为我们进程号,并在命令行下附加。

成功附加后,可以下段了,打开Debugger Option

我们选择在线程开始和库加载时下断,修改成功后,jdb附加,点击运行

程序会断在elf头处,按下G键,搜索mmap,在mmap函数的段首和断尾下段

F9运行,来到断尾时F8单步,

来到此处时,在 BLunk_5C999C2C下断,F9一下,F7跟进去

跟进去今后在BLX LR处进行下断,此处就是进行反调试的地方,原理依然是获取TracePid的值判断当前是不是处于调试状态,建议第一次调试的人在fgets和fopen处下断,再f7跟进此调用就可以看到TracePid的值了。

跟进去之后,我们直接把方法移到最下方,就可以看到kill符号了,这就是杀进程的地方,如果当前处于调试状态,则直接结束进程。

我们在此函数的所有cmpR0,#0处下断,F9一下后即断在断点处,观察寄存器窗口的R0值,实质就是当前的TracePid的16进制的值

不确定的可以使用cat /proc/pid/status进行对比一下,我们直接把R0置0,右键选择Zero Value即可清0,继续F9

我们看到程序又来到了mmap处,继续f9

当继续断在调用反调试功能的方法时,继续F7跟进,依然在所有的cmp R0,#0处下断,断下后把R0清0后继续F9运行

目前的规律是,调用BLXLR的第一次,第二次和第四次是进行反调试判断的,第三次并不影响,可以直接f9跳过去,三次反调试搞定后,就可以愉快的F9运行并观察堆栈窗口了

当看到出现如下所示时:

说明壳已经开始解密并释放dex文件了,我们直接F8单步十几步,最后F9一下就可以看到我们需要的dex头了

直接脚本mp出来即可,最后把libjiagu的所有文件删除,并修复下Application标,如果存在则修复,不存在删除即可

阅读全文

与反编译掌机版相关的资料

热点内容
dvd光盘存储汉子算法 浏览:753
苹果邮件无法连接服务器地址 浏览:956
phpffmpeg转码 浏览:667
长沙好玩的解压项目 浏览:140
专属学情分析报告是什么app 浏览:562
php工程部署 浏览:831
android全屏透明 浏览:730
阿里云服务器已开通怎么办 浏览:801
光遇为什么登录时服务器已满 浏览:300
PDF分析 浏览:482
h3c光纤全工半全工设置命令 浏览:139
公司法pdf下载 浏览:379
linuxmarkdown 浏览:349
华为手机怎么多选文件夹 浏览:681
如何取消命令方块指令 浏览:347
风翼app为什么进不去了 浏览:776
im4java压缩图片 浏览:360
数据查询网站源码 浏览:148
伊克塞尔文档怎么进行加密 浏览:888
app转账是什么 浏览:161