吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 515|回复: 20
收起左侧

[Android 求助] 怎么把这个转换

[复制链接]
冥界3大法王 发表于 2024-12-4 23:19
public class dGameAppAndroIDActivity extends Activity {
    public void OnRewardedVerify(boolean z) {
        this.m_webView.loadUrl("javascript:window.rewardedVideoVerifyed(true)");
    }
}


转成smali的

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

Airiair 发表于 2024-12-5 09:06
.class public LdGameAppAndroIDActivity;
.super Landroid/app/Activity;

# 声明一个WebView成员变量
.field private m_webView:Landroid/webkit/WebView;

# OnRewardedVerify方法的Smali表示
.method public OnRewardedVerify(Z)V
    .locals 1

    # 加载当前对象的引用到v0寄存器
    .local v0, "this":LdGameAppAndroIDActivity;

    # 检查m_webView是否为null(这里简化处理,不实际检查)
    # 正常情况下,我们需要使用if-nez等指令来检查null

    # 加载字符串"javascript:window.rewardedVideoVerifyed(true)"到寄存器
    const-string v1, "javascript:window.rewardedVideoVerifyed(true)"

    # 调用m_webView的loadUrl方法
    invoke-virtual {v0, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V

    # 返回void
    return-void
.end method
几点说明:

.class 和 .super 指令定义了类名和父类名。
.field 指令声明了一个成员变量(在这个例子中是m_webView)。在真实的Smali代码中,这个字段应该在类的初始化部分(例如<init>方法)中被正确初始化。
.method 和 .end method 指令定义了一个方法。
.locals 指令声明了方法内部使用的局部变量数量。
寄存器(如v0, v1)用于在方法内部存储值。在Dalvik字节码中,所有的操作都是通过寄存器进行的。
const-string 指令用于将字符串常量加载到寄存器中。
invoke-virtual 指令用于调用对象的实例方法。
然而,这个Smali代码片段有几个问题:

它没有正确地处理m_webView可能为null的情况。
它假设m_webView已经被正确初始化,但在提供的Java代码中并没有显示这一点。
它没有处理方法参数z,尽管在Java代码中这个参数没有被使用,但在Smali中你应该至少声明并加载它(即使不使用)。
为了创建一个完全正确的Smali文件,你需要考虑类的完整结构,包括构造函数、其他方法、字段的初始化等。此外,由于Smali代码通常是通过反编译现有的.class文件得到的,因此手动编写Smali代码可能不是最佳实践,除非你有特定的需求或正在学习Dalvik字节码。

如果你想要从Java代码生成Smali代码,最好的方法是先编译Java代码成.class文件,然后使用baksmali工具将.class文件反编译成Smali代码。这样可以确保生成的Smali代码是准确和完整的。
anwen 发表于 2024-12-4 23:26
本帖最后由 anwen 于 2024-12-5 10:14 编辑

{:301_1009:} 虽然我不太懂,这种简单的要求 代码也不复杂的  ChatGPT 应该能解决

将 Java 代码转换为 Smali(Android 的汇编语言)涉及将 Java 方法、类、字段等按 Smali 语法进行结构化。以下是你给出的 dGameAppAndroIDActivity 类的 Smali 转换示例:

.class public LdGameAppAndroIDActivity;
.super Landroid/app/Activity;

# 方法
.method public OnRewardedVerify(Z)V
    .registers 2
    # 将参数 z 存储到寄存器
    const/4 v0, 0x1     # v0 = true

    # 调用 WebView 的 loadUrl 方法
    iget-object v1, p0, LdGameAppAndroIDActivity;->m_webView:Landroid/webkit/WebView;

    # 构造 JavaScript 字符串
    const-string v2, "javascript:window.rewardedVideoVerifyed(true)"

    invoke-virtual {v1, v2}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V

    return-void
.end method

注释说明:

  1. .class.super 行声明类及其父类。
  2. .method 行定义一个名为 OnRewardedVerify 的方法,接受一个布尔参数并返回 void
  3. iget-object 获取 m_webView 的实例。
  4. 使用 invoke-virtual 调用 loadUrl 方法来执行 JavaScript。

确保在实际使用时检查 m_webView 的声明和初始化,以确保其在使用前已被正确初始化。😊

 楼主| 冥界3大法王 发表于 2024-12-4 23:43
anwen 发表于 2024-12-4 23:26
虽然我不太懂,这种简单的要求 代码也不复杂的  ChatGPT 应该能解决

不复杂,那就请转一个我看看。
JackLSQ 发表于 2024-12-4 23:56
写一个这样的操作 app,然后去反编译。。。。。
wujialin1219 发表于 2024-12-5 00:03
有顶困难,帮支持一下
52blah 发表于 2024-12-5 00:25
.class public LdGameAppAndroIDActivity;
.super Landroid/app/Activity;

# 构造函数
.method public constructor <init>()V
    .locals 0
    invoke-direct {p0}, Landroid/app/Activity;-><init>()V
    return-void
.end method

# OnRewardedVerify 方法
.method public OnRewardedVerify(Z)V
    .locals 2

    # 从当前对象获取 m_webView 字段
    iget-object v0, p0, LdGameAppAndroIDActivity;->m_webView:Landroid/webkit/WebView;

    # 准备参数 "javascript:window.rewardedVideoVerifyed(true)"
    const-string v1, "javascript:window.rewardedVideoVerifyed(true)"

    # 调用 loadUrl 方法
    invoke-virtual {v0, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V

    # 返回
    return-void
.end method
 楼主| 冥界3大法王 发表于 2024-12-5 07:11
52blah 发表于 2024-12-5 00:25
.class public LdGameAppAndroIDActivity;
.super Landroid/app/Activity;

不懂开发,用啥工具转?
试了几个在线的都不中用。
 楼主| 冥界3大法王 发表于 2024-12-5 07:12
JackLSQ 发表于 2024-12-4 23:56
写一个这样的操作 app,然后去反编译。。。。。

现在让你用不熟悉的delphi写一个。
问题是不会也是白瞎啊。
xiabo 发表于 2024-12-5 08:00
我也想学学
Pwaerm 发表于 2024-12-5 08:07
[Asm] 纯文本查看 复制代码
.class public Lcom/example/dGameAppAndroIDActivity;
.super Landroid/app/Activity;

# 类的构造函数可以省略,因为它是Activity类默认的构造函数

# 成员变量声明 (假设 m_webView 是 WebView 类型)
.field private m_webView:Landroid/webkit/WebView;

# OnRewardedVerify方法
.method public OnRewardedVerify(Z)V
    .locals 1

    # 调用 m_webView.loadUrl("javascript:window.rewardedVideoVerifyed(true)");
    const-string v0, "javascript:window.rewardedVideoVerifyed(true)"

    # 调用 m_webView.loadUrl 方法
    iget-object v1, p0, Lcom/example/dGameAppAndroIDActivity;->m_webView:Landroid/webkit/WebView;

    invoke-virtual {v1, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V

    return-void
.end method


您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-24 01:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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