apk破解(一)从最简单的判断开始

大部分的测试代码都将是我亲手完成,源码地址在这里
工欲善其事,必先利其器。
破解你可能会用到的工具在这里
而我将使用Apk改之理,下载链接

下面正式开始:
首先,拿到了一个这样的apk,要做的第一步,自然是运行到手机上。
显示成这样样子:
app1
很简单的样子。

那就先来反编译一下。
直接将apk拖入工具即可。
反编译完成界面如下:
完成
选中如下文件:
选中

然后打开java代码:

打开

显示如下:
显示

这几乎就是源代码了。当然,结合源码看效果更佳。

肯定的是,红框部分是关键代码:
关键

相信所有人都能看懂这是什么意思,比对一个字符串和另一字符串是否相符,符合就跳转,理论上是跳转到成功,否则弹个吐司。

那么我们就来看一下后面这段神秘的代码究竟是什么,直接左键单击就可以。
注册码

这真是个神奇的注册码,把获取到的Android id后面拼个code就是注册码了。我不会告诉你,activity的title就是Android id的。
这个时候,你可能会尝试,把这个组合输入到编辑框里,然后奇迹就发生了。这当然是可以的,但是这属于最简单的追码,不是本节的主要内容,就略过了,以后详说。

好,这个时候,也可以如此做,既然符合跳转,不符合吐司。那么在符合前面加个非应该也会达到目的。

看到这些乱码头都大了
smali

但是别慌,什么都是有技巧的,既然在java代码中看到了SuccessActivity这个关键字,是和注册成功挂钩的,就去搜索它。
一下就找到了:
success

好了,到这里就接近成功了。

按照原来的思路,!equals,看108行,if-eqz,其实这就是了。它的相反就是if-nez。那就改上去。

nez

Ctrl + S保存。

编译生成apk:

apk

好了,剩下安装验证就自己完成吧。

结果就是对的反而不对,错的反而对。

  • 11
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ApkTool』简要介绍 提供1.3.5测试版源码。 此程序在其基础上完善并添加一些功能,此版本号定位2.0 最终版。 定为最终版的原因是支持动态加载最新的内置工具: ..\Bin\*.*目录下的所有工具如果有最新版本的,替换Bin目录内的程序即可应用最新版。 [注意:不要更改目录内的文件名,否则不会被加载。],判断是否使用最新版本的程序, 可以看启动日志中每个文件的路径。日志内容如下: 加载apktool.jar的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\apktool.jar 加载aapt.exe的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\aapt.exe 加载signapk.jar的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\signapk.jar 加载testkey.pk8的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin estkey.pk8 加载testkey.x509.pem的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin estkey.x509.pem 加载baksmali.jar的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\baksmali.jar 加载smali.jar的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\smali.jar 加载dex2jar.jar的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\dex2jar.jar 加载asm-debug-all.jar的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\asm-debug-all.jar 加载commons-io.jar的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\commons-io.jar 加载slf4j-simple.jar的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\slf4j-simple.jar 加载slf4j-api.jar的路径:C:\Users\Owner\Desktop\ApktoolGul\Bin\slf4j-api.jar ============================================================== 华丽的分割线 ============================================================== 使用说明: =========================================================== 使用环境:须安装 java,下载地址:http://www.java.com/zh_CN/ 1、反编译APK 拖拽APK程序到"反编译APK"按钮前的输入区,点击"反编译APK"按钮 2、重建APK 把第一步得到 文件夹 拖拽到"重建APK"按钮前面的输入区,点击"重建APK"按钮, 至此会自动生成已经签名好的"XXOO(已签名).apk" 3、签名 拖拽APK程序到"签名"按钮前的输入区,点击"签名"按钮,自动生成已经签名好的"XXOO(已签名).apk" 4、反编译dex 拖拽dex文件或odex到"反编译dex"按钮前的输入区,点击"反编译dex"按钮, 会在dex文件所在目录外生成一个与dex文件名相同的目录 5、重建dex 拖拽要重建的目录到"重建dex"按钮前的输入区,点击"重建dex"按钮,会生成与目录名相同的dex文件 6、dex转jar 拖拽dex文件或odex到"6、dex转jar"按钮前的输入区,点击"6、dex转jar"按钮, test.dex 会生成 test.dex.dex2jar.jar 文件 7、jar,class转java 拖拽保护class的目录,或.class文件或 jar文件到"jar,class转java"按钮前的输入区,点击"jar,class转java"按钮, 会生成相应的 java文件。 ========================== 内置软件版本: | apktool 1.4.3 | aapt r04 | baksmali 1.3.2 | smali 1.3.2 | dex2jar 0.0.7.9 | asm-debug-all 3.2 | commons-io 2.0 | slf4j 1.5.6 | jad 1.5.8e2 | ========================== ^_^ Enjoy! 2012.3.16 By:漏网之鱼 QQ:530747686
好的,以下是一个简单的Android BLE应用程序示例,可以扫描BLE设备并显示它们的信号强度: 1. 首先,在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> ``` 2. 在您的布局文件中添加一个ListView,用于显示扫描到的设备列表: ``` <ListView android:id="@+id/device_list" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 在您的活动中,实现BLE扫描回调函数并在回调函数中处理RSSI数据: ``` public class MainActivity extends AppCompatActivity { private BluetoothAdapter mBluetoothAdapter; private ListView mDeviceList; private DeviceListAdapter mAdapter; private List<BluetoothDevice> mDeviceArrayList = new ArrayList<>(); private final ScanCallback mScanCallback = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { BluetoothDevice device = result.getDevice(); int rssi = result.getRssi(); // 获取RSSI值 mAdapter.addDevice(device, rssi); // 添加设备和RSSI值到列表中 } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDeviceList = findViewById(R.id.device_list); mAdapter = new DeviceListAdapter(this, mDeviceArrayList); mDeviceList.setAdapter(mAdapter); // 获取BluetoothAdapter final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); mBluetoothAdapter = bluetoothManager.getAdapter(); } public void scanDevices(View view) { // 检查是否已启用蓝牙 if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); return; } // 扫描BLE设备 mDeviceArrayList.clear(); mAdapter.notifyDataSetChanged(); ScanSettings settings = new ScanSettings.Builder() .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) .build(); List<ScanFilter> filters = new ArrayList<>(); mBluetoothAdapter.getBluetoothLeScanner().startScan(filters, settings, mScanCallback); } private class DeviceListAdapter extends BaseAdapter { private List<BluetoothDevice> mList; private LayoutInflater mInflater; public DeviceListAdapter(Context context, List<BluetoothDevice> deviceList) { mList = deviceList; mInflater = LayoutInflater.from(context); } public void addDevice(BluetoothDevice device, int rssi) { if (!mList.contains(device)) { mList.add(device); } notifyDataSetChanged(); } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_device, parent, false); } BluetoothDevice device = mList.get(position); TextView nameTextView = convertView.findViewById(R.id.device_name); TextView addressTextView = convertView.findViewById(R.id.device_address); TextView rssiTextView = convertView.findViewById(R.id.device_rssi); nameTextView.setText(device.getName()); addressTextView.setText(device.getAddress()); rssiTextView.setText(String.valueOf(getItem(position))); return convertView; } } } ``` 4. 最后,在您的列表项布局文件中添加一个TextView,用于显示设备的RSSI值: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="?android:listPreferredItemHeight" android:orientation="vertical"> <TextView android:id="@+id/device_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:textStyle="bold" android:paddingLeft="16dp"/> <TextView android:id="@+id/device_address" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:paddingLeft="16dp"/> <TextView android:id="@+id/device_rssi" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:paddingLeft="16dp"/> </LinearLayout> ``` 这样,当您点击扫描按钮时,应用程序将开始扫描BLE设备,并将它们的名称,地址和RSSI值显示在列表中。希望这可以帮助您入门BLE编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值