吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4136|回复: 24
收起左侧

[Android 原创] [超级详细]学so编写时顺手制作CrackMe的过程

  [复制链接]
佚名RJ 发表于 2020-12-14 15:58
本帖最后由 佚名RJ 于 2020-12-14 16:41 编辑

[超级详细]学so编写时顺手制作CrackMe的过程

前几天发了这么一篇文章: 自己顺手搞了一个超级超级简单的CrackMe

一、所用工具

Android Studio4.1 + Ndk 21.1.6352462 + MUMU模拟器2.4.2

二、编写过程

打开 Android Studio4.1版本 选择 Empty Activity 然后 Next

1.选择模板.png

创建项目,填写应用名称与应用包名 选择项目存放的位置  之后点击 Finish

2.创建项目.png

创建后找到 activity_maim.xml使用下面的代码直接全选并替换 Code里的代码 搞一个界面布局,如下图所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout1"
        android:layout_alignLeft="@+id/linearLayout1"
        android:layout_alignRight="@+id/linearLayout1"
        android:layout_marginTop="20dp">

        <EditText
            android:id="@+id/TEST_PASS"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint=" 请输入密   码"
            android:inputType="textPassword">

            <requestFocus />
        </EditText>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="39dp">

        <EditText
            android:id="@+id/TEXT_NAME"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint=" 请输入用户名" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout2"
        android:layout_alignLeft="@+id/linearLayout2"
        android:layout_marginLeft="3dp"
        android:layout_marginTop="-2dp">

        <Button
            android:id="@+id/BTN_Login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/linearLayout3"
            android:layout_alignRight="@+id/logbutredister"
            android:layout_marginTop="31dp"
            android:background="#5f9ea0"
            android:text="登  录"
            android:textColor="#ffffff"
            app:backgroundTint="#009688" />
    </LinearLayout>
</RelativeLayout>

3.搞一个界面.png

写登录验证相关的代码,这里就只写死密码相关,后期so文件的做好后,直接替换掉写死的数据就可以了!

public class MainActivity extends AppCompatActivity {
    private EditText Name;
    private EditText Pass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.Name = (EditText) findViewById(R.id.TEXT_NAME);
        this.Pass = (EditText) findViewById(R.id.TEST_PASS);
        ((Button) findViewById(R.id.BTN_Login)).setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                MainActivity.this.check(MainActivity.this.Name.getText().toString().trim(), MainActivity.this.Pass.getText().toString().trim());
            }
        });
    }

    @SuppressLint({"WrongConstant", "ShowToast"})
    public void check(String name, String pass) {
        if (pass.equals("yimingrj") {    //yimingrj
            Toast.makeText(this, "恭喜!登录成功", 0).show();
            startActivity(new Intent().setClass(this, NewActivity.class));
        }
        Toast.makeText(this, "抱歉!您失败了", 0).show();
    }
}

4.写登录验证代码.png

创建另一个Activity,只搞一个TextView 布局控件,用来显示后期登录成功之后的数据!

5.创建另一个Activity.png

创建一个类RjJNI,并写相关代码,作用就是后期读取so文件中的数据

7.写注册so代码.png

选择 软件包 并点击 Open in Terminal 在软件包处打开命令行。如下图所示:

8.在包上打开命令行1.png

并 执行相关的命令 编译 RjJNI.java文件为class文件  如下图所示:

9.javac编译文件.png

选择 java 并点击 Open in Terminaljava处打开命令行 并记住包名和类名。如下图所示:

10.java上再开命令行1.png

使用 javah -jni com.yimingrj.crackme.RjNI 生成.h文件,如下图所示:

11.javah生成.h文件1.png

选择main 创建 JNI Folder 如下图所示:

12.新建JNI Folder 1.png

选择 jni 新建一个c文件 我这里命名为了c.c

13.新建一个c文件 1.png

引用上面.h的代码 或者 将上面 .h的代码复制进c.c,简单修改返回一个字符串 yiming-yrj(这是后期的登录密码)!

14.复制代码并让其返回一个字符串.png

创建 Android.mkApplication.mk 文件 并写入相关的代码。如下图所示:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := RjJNI
LOCAL_SRC_FILES := c.c
include $(BUILD_SHARED_LIBRARY)

15.创建两个文件写相关代码.png

在 项目下找到相关的文件 并添加 ndk路径 或者 你之前配置的有也可以,这里ndk的版本不是一定的!

16.配置NDK与下载.png

选择 jni 并点击 Open in Terminaljni处打开命令行 并输入 ndk-build 运行生成so 如下图所示:

17.生成so文件.png

之后就在 libs中生成了多种架构so文件,这里也可以直接在Application.mk中定制想要生成的so架构文件!

18.生成多种架构so文件.png

找到 build-gradle 添加相关代码加载使用so文件所在的路径  之后点击 Sync Now  同步。如下图所示:

        sourceSets {
            main() {
                jniLibs.srcDirs = ['src/main/libs']
                jni.srcDirs = []
            }
        }

19.添加相关代码与调用so文件.png

MainActivity.javaNewActivity.java 修改相关的代码调用so文件里的密码  并运行在模拟器  看so调用情况

20.修改代码调用so文件里的密码并运行看执行1.png

21.另一个界面写相关的代码.png

最后验证 软件加载so文件以及调用的情况,执行成功!如下图所示,一个很简单很简单的so就制作完成了!

22.最后验证.png

三、最后总结

之前只是想了解一下so文件的制作过程和如何调用so文件里的内容,想着以后对分析so文件会有一定的帮助!

写这篇文章之前我也百度看了一些,也有一些教程过时了,今天总结了一下,毕竟一直看的话很容易形成

眼睛:我会了;            手:不,你不会!

通过这篇文章的总结,我清楚了so文件的简单制作流程 以及 so文件内数据的简单调用 ,收获还是挺多的!

免费评分

参与人数 11吾爱币 +19 热心值 +10 收起 理由
奇奇小霸王龙 + 1 + 1 太长不看 先收藏
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
qaz003 + 1 + 1 图文并茂。。辛苦啦。。
Rayanx + 1 热心回复!
王者归来1 + 1 + 1 谢谢@Thanks!
正己 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
刘留留 + 1 + 1 谢谢@Thanks!
nixiang_0607 + 1 + 1 我很赞同!
ruohuan232 + 1 + 1 我很赞同!
guo8122881 + 1 + 1 谢谢@Thanks!
兜兜风f + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

正己 发表于 2020-12-14 20:53
Gentmepj 发表于 2020-12-14 20:14
谢谢楼主 学习了
若能再带一下 这个CRACKME为什么用这种方式编程会被破解更好

没有绝对安全的软件,佚名之前的帖子说过很详细的破解教程了
wantwill 发表于 2020-12-14 16:20
guo8122881 发表于 2020-12-14 17:05
wanshiz 发表于 2020-12-14 17:12
感谢楼主分享经验。有志者事竟成。
tabirs 发表于 2020-12-14 17:17
感谢楼主分享经验。有志者事竟成。
lwedwin 发表于 2020-12-14 18:00

感谢楼主分享经验。有志者事竟成。
Heilexplode 发表于 2020-12-14 18:07
真的是很细了,目前还只能理解小部分,借鉴了
Gentmepj 发表于 2020-12-14 20:14
谢谢楼主 学习了
若能再带一下 这个CRACKME为什么用这种方式编程会被破解更好
一人之下123456 发表于 2020-12-14 20:24
感谢楼主分享的教程,学习了
刘留留 发表于 2020-12-14 20:51
感谢分享,写的很详细
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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