ИullЯE
10.8K subscribers
3 photos
9 videos
12 files
21 links
Download Telegram
Channel created
Pernah nggak sih kalian mau nambahin toast atau dialog di salah satu activity tapi ternyata mereka nggak ada method onCreate nya ?
Nah pasti beberapa dari kalian pernah nyoba naruh itu di method lain seperti onStart, onResume dan sebagainya. Cara itu sebenarnya nggak salah dan boleh boleh aja, tapi kalian harus tau dulu method itu dipanggil setiap apa aja biar nanti kalian nggak kaget tiba-tiba toast kalian muncul sendiri. Nah buat informasi lebih lengkapnya silahkan baca-baca tentang Activity Lifecycle ya.

- https://developer.android.com/guide/components/activities/activity-lifecycle

- https://www.codepolitan.com/blog/memahami-activity-lifecycle-di-android-598d779a83dbf/

Terus gimana caranya agar kita bisa naruhnya di onCreate aja ? Caranya gampang kok, kita tinggal buat aja method onCreatenya sendiri, tapi sebelum itu gw mau kasih tau dulu, kalo kalian melihat di activity itu nggak ada method onCreatenya, itu sebenarnya dia pakai onCreate milik super classnya, kalian bisa masuk ke super classnya dan tambahin toast kalian di onCreatenya.

Eh tapi gw saranin jangan kek gini ya, karena biasanya super classnya itu juga bakal digunakan oleh activity lainnya, jadi nanti toast milik kalian bakal kepanggil terus tiap ada activity baru yang dibuat.

Jadi buat atasi itu kalian tambahin aja kode onCreate seperti ini di activity kalian:

.method public onCreate(Landroid/os/Bundle;)V
.registers 4

invoke-super {p0, p1}, Lcom/your/super_class/BaseActivity;->onCreate(Landroid/os/Bundle;)V

# tambahkan toast kalian di sini

return-void
.end method


Jangan lupa ganti Class Lcom/your/super_class/BaseActivity; sesuai dengan super class kalian ya, silahkan disesuaikan juga ya jumlah registernya jika kalian rasa itu kurang.

#tutorial
@NullRE_Channel
👍359❤‍🔥8
custom_toast.zip
2.3 KB
Custom Toast

Features

1. Text Color: Customize the color of your toast message text.
2. Background Color: Set a custom background color for your toast.
3. Text Size: Adjust the text size for better readability.
4. Bold Style: Add bold styling to your toast message text.
5. Italic Style: Add italic styling to your toast message text.
6. Toast Duration: Set the duration of your toast (0 for short, 1 for long).
7. Corner Radius: Apply rounded corners to the toast background.
8. Image Support: Add an image to your toast message.

Basic toast

invoke-static {p0}, Lnullre/toast/CustomToast;->text(Landroid/content/Context;)V

Toast with image

invoke-static {p0}, Lnullre/toast/CustomToast;->image(Landroid/content/Context;)V

Note : Add your image to the assets folder.

Tutorial ? Click here.

@NullRE_Channel
❤‍🔥11👍115
Sedikit catatan buat kalian yang belum tau atau masih bingung gimana cara mengembalikan data yang sesuai dengan type data kembalian dari methodnya.

| Smali                | Java                  |
|----------------------|-----------------------|
| Z | boolean |
| Ljava/lang/Boolean | Boolean |
| I | int |
| Ljava/lang/Integer | Integer |
| Ljava/util/Date | Date |
------------------------------------------------


boolean

.method public isPremium()Z
.registers 2

const/4 v0, 0x1

return v0
.end method


Boolean

.method public isPremium()Ljava/lang/Boolean;
.registers 2

const/4 v0, 0x1

invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;

move-result-object v0

return-object v0
.end method


Boolean

.method public isPremium()Ljava/lang/Boolean;
.registers 2

sget-object v0, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;

return-object v0
.end method


int

.method public isPremium()I
.registers 2

const/4 v0, 0x1

return v0
.end method


Integer

.method public isPremium()Ljava/lang/Integer;
.registers 2

const/4 v0, 0x1

invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

move-result-object v0

return-object v0
.end method


Date

.method public expiryDate()Ljava/util/Date;
.registers 4

new-instance v0, Ljava/util/Date;

const-wide v1, 0x3197DC61800L

invoke-direct {v0, v1, v2}, Ljava/util/Date;-><init>(J)V

return-object v0
.end method


@NullRE_Channel

#smali #catatan
1👍31🆒128❤‍🔥7🔥53👏1
Halo semuanya,

Terima kasih buat kalian yang sudah bergabung dan menjadi bagian dari channel ini. Tidak terasa sudah lebih dari 4 bulan sejak channel ini dibuat, selama itu juga ada banyak hal yang telah kita pelajari dan kita diskusikan bersama di group @NullRE_Channel.

Di sini kami ingin mengumumkan bahwa channel @NullRE_Channel akan berhenti membuat aplikasi mod. Kita juga telah menghapus seluruh aplikasi mod yang pernah diupload dan mematikan akses terhadap aplikasi mod berikut ini :

- Wibuku
- Vigloo

Keputusan ini diambil karena adanya kesibukan dan prioritas lain yang harus kami kerjakan. Oleh karena itu, kami memutuskan untuk menghentikan sementara seluruh aktivitas di channel dan group diskusi @NullRE_Channel.

Kami harap semuanya dapat memahami keputusan ini dan sekali lagi kami ucapkan terima kasih atas dukungan, waktu, dan kebersamaan kalian selama ini.


Terima kasih,
NullRE_Channel
23😢353😭345🫡48👍37❤‍🔥9🙏54🔥4🆒4🤯2👏1
PineHookPlusEnc.zip
1 MB
PineHookPlusEnc

What is this? PineHookPlusEnc is a modified version of PineHookPlus with various new features.
How to use? It's the same as PineHookPlus, please read here for the PineHookPlus tutorial.

Additional features:
- Encrypt config.json
- Create toast directly from config.json
- Call custom dialog from config.json
- Added support for non-primitive data types (*To handle the return type of a method. Please add the key "returnType". See the example config.json provided).
- Handle Date data type.

Notes:
Data types can be written directly as "Integer" or "java.lang.Integer" (*specifically for wrapper classes of primitive data types + Date).

To call a custom dialog or toast as follows:
{
"com.example.app.MainActivity": {
"_dialog": {
"class": "com.example.app.CustomDialog",
"method": "show"
},
"_toast": {
"text": "Test toast"
}
}
}


Credits:
Pine
PineHookPlus
PineHookPlusEnc
3❤‍🔥7👍74🔥1
Important Notes:
- Place the hook folder inside the assets folder (if you want to change it, please adjust it in the Config class).
- Call the hook from AppComponentFactory or from another place, such as onCreate / Provider.

How to call the hook from AppComponentFactory:
Add the following code to the AndroidManifest.xml:

android:appComponentFactory="com.pinehook.plus.AppComponentFactoryLoader"

Calling the hook from onCreate or attachBaseContext of an Activity:

invoke-static {}, Lcom/pinehook/plus/PineLoader;->init()V

Calling the Hook Using a Provider:
<provider
android:name="com.pinehook.plus.Loader"
android:exported="false"
android:authorities="com.pinehook.plus.loader"
android:initOrder="100" />
3👍5❤‍🔥4
Differences between before, after, and result:

- Before:
When it runs: Before the target method is called.
Purpose: Useful for modifying the values of parameters passed to the target method.
Example use case: If you want to change the parameter values before the method is executed.

- After:
When it runs: After the target method is called.
Purpose: Useful for modifying the return value of the target method while still executing the original method's logic.
Example use case: If you want to alter the result returned by the method after it has completed execution.

Result:
When it runs: Replaces the entire implementation of the target method.
Purpose: Useful for completely overriding the method's logic and directly returning a desired value without executing the original method's code.
Example use case: If you want to ignore the original method's logic and directly return a specific value.

Example:
{
"com.pinehook.plus.MainActivity": {
"returnInteger": {
"returnType": "Integer",
"after": {
"result": 200
}
}
}
}


The config above will have the same return value as follows:
{
"com.pinehook.plus.MainActivity": {
"returnInteger": {
"returnType": "Integer",
"result": 200
}
}
}


The difference between the two configs above is that, in the first one, all the code in the method will be executed first and then return 200, while in the second one, it directly replaces the method's implementation to return 200.

Note:
The "returnType" is optional. If you do not add it, it will return a primitive data type (int) or (I) in smali. However, if you specify the type as "Integer," the return type will be (Integer) or (Ljava/lang/Integer;) in smali.
4👍8❤‍🔥41
How to Encrypt config.json

1. Open the script folder and place your config.json file there.
2. Run the command python3 enc.py.
3. Copy your configKey and place it in the configKey method inside the Config class (com.pinehook.plus.Config).
4. Change the value of the useEncryptedConfig method to true (0x1).
5. Delete the config.json file from your hook folder, and add the config.enc file to that folder.

Note:
If this is your first time running the script, please install the required libraries first by running the following command inside the script folder:
pip3 install -r requirements.txt
3❤‍🔥5👍5🥰32
Have you ever wondered if performing dex2c on the hook you created is enough to secure it from others trying to figure out what you’re actually hooking? It turns out that it’s very easy for others to see what you’re hooking, even if you’ve applied dex2c to your hook. In fact, simply checking the logs is often enough, as many people forget to disable logging in their Pine hook. Here’s how to disable it:
// Do we need to print more detailed logs?
PineConfig.debug = false;
// Is this process debuggable?
PineConfig.debuggable = false;

But is disabling the logs alone enough? Apparently not. In this video, I demonstrate how easy it is for someone to simply replace the original top.canyie.pine folder with a modified version that logs the class, method, and result of the hooked functions.

Of course, the method above still has its limitations. If there’s a control flow that accesses the top.canyie.pine folder, we can’t easily replace it. However, this can still be worked around by hooking the hook method of the Pine class and ensuring that our injected hook runs earlier than the hook we want to observe. In the end, there’s not much we can do here. Perhaps adding additional protections like Jiagu360 could help make it more difficult for someone to uncover the contents of your hook.

Conclusion: Don’t forget to disable Pine’s logging and add various other types of protections. Also, be prepared for the possibility that your hook might still be exposed despite these measures.
3👍14❤‍🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
3👍237🤩190🎉180🥰172🔥155👏1522❤‍🔥2