吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 4290|回复: 98

[原创逆向图文] 《re:从零开始的java逆向基础》#3方法(函数)

  [复制链接]
Lightcolour 发表于 2019-9-20 16:05 | 显示全部楼层 |阅读模式

先定义一个方法
public class Main {
      publicstatic double getNumber() {
           returnMath.random()/2;
      }
}
反编译
Constant pool:
  #1 = Methodref         #6.#15         //java/lang/Object."<init>":()V
  #2 = Methodref         #16.#17        //java/lang/Math.random:()D
  #3 = Double             2.0d
  #5 = Class              #18            // Main
  #6 = Class              #19            // java/lang/Object
  #7 = Utf8              <init>
  #8 = Utf8               ()V
  #9 = Utf8               Code
#10 = Utf8              LineNumberTable
#11 = Utf8               getNumber
#12 = Utf8               ()D
#13 = Utf8               SourceFile
#14 = Utf8               Main.java
#15 = NameAndType       #7:#8          //"<init>":()V
#16 = Class              #20            // java/lang/Math
#17 = NameAndType       #21:#12        // random:()D
#18 = Utf8               Main
#19 = Utf8              java/lang/Object
#20 = Utf8              java/lang/Math
#21 = Utf8               random
{
public Main();
   descriptor: ()V
   flags: ACC_PUBLIC
   Code:
     stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1             // Methodjava/lang/Object."<init>":()V
         4: return
     LineNumberTable:
       line 1: 0
public static double getNumber();
   descriptor: ()D
   flags: ACC_PUBLIC, ACC_STATIC
   Code:
     stack=4, locals=0, args_size=0
         0: invokestatic  #2            // Method java/lang/Math.random:()D
         3: ldc2_w        #3                  // double 2.0d
         6: ddiv
         7: dreturn
     LineNumberTable:
       line 3: 0
}
SourceFile: "Main.java"
invokestatic #2  调用常量#2定义的函数 也就是说调用了这个方法得到了一个随机数
函数名定义再常量池Methodref中 定义 类 方法 返回
2 = Methodref         #16.#17 //java/lang/Math.random:()D
也就是说 #2 是#16#17 拼接成的
#16定义了类名Method java/lang/Math #17定义了方法 random返回类型()D
#17 = NameAndType       #21:#12        // random:()D
也就是说 #17 是#21#12 拼接成的
#21 定义了random 方法
#12 返回类型()D
()括号内没有东西表示没参数
我们再看看返回一个String的例子
public class Main {
      public staticvoid main(String[] args) {
           System.out.println("Lightcolour");
      }
}
反编译
  Lastmodified 2019-9-20; size 413 bytes
  MD5checksum 8e45b6aafc1404a9c015f8c0f03e385c
Compiled from "Main.java"
public class Main
  minorversion: 0
  majorversion: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 =Methodref          #6.#15         //java/lang/Object."<init>":()V
   #2 =Fieldref           #16.#17        //java/lang/System.out:Ljava/io/PrintStream;
   #3 =String             #18            // Lightcolour
   #4 =Methodref          #19.#20        //java/io/PrintStream.println:(Ljava/lang/String;)V
   #5 =Class              #21            // Main
   #6 =Class              #22            // java/lang/Object
   #7 =Utf8               <init>
   #8 =Utf8               ()V
   #9 =Utf8               Code
  #10 =Utf8               LineNumberTable
  #11 =Utf8               main
  #12 =Utf8               ([Ljava/lang/String;)V
  #13 =Utf8               SourceFile
  #14 =Utf8               Main.java
  #15 =NameAndType        #7:#8          // "<init>":()V
  #16 =Class              #23            // java/lang/System
  #17 =NameAndType        #24:#25        // out:Ljava/io/PrintStream;
  #18 =Utf8               Lightcolour
  #19 =Class              #26            // java/io/PrintStream
  #20 =NameAndType        #27:#28        // println:(Ljava/lang/String;)V
  #21 =Utf8               Main
  #22 =Utf8               java/lang/Object
  #23 =Utf8               java/lang/System
  #24 =Utf8               out
  #25 =Utf8               Ljava/io/PrintStream;
  #26 =Utf8               java/io/PrintStream
  #27 =Utf8               println
  #28 =Utf8               (Ljava/lang/String;)V
{
public Main();
   descriptor: ()V
   flags: ACC_PUBLIC
   Code:
     stack=1, locals=1, args_size=1
        0: aload_0
        1: invokespecial #1                 // Method java/lang/Object."<init>":()V
        4: return
     LineNumberTable:
       line 1: 0
public static void main(java.lang.String[]);
   descriptor: ([Ljava/lang/String;)V
   flags: ACC_PUBLIC, ACC_STATIC
   Code:
     stack=2, locals=1, args_size=1
        0: getstatic     #2     // Fieldjava/lang/System.out:Ljava/io/PrintStream;
        3: ldc           #3     // String Lightcolour
        5: invokevirtual #4    // Methodjava/io/PrintStream.println:(Ljava/lang/String;)V
        8: return
     LineNumberTable:
       line 3: 0
       line 4: 8
}
getstatic  #2获取System.out的引用入栈
ldc将字符串“Lightcolour” 入栈
invokevirtual 调用println方法 这里会进行2个操作 1、将字符串Lightcolour出栈传入(Ljava/lang/String;)V  2、将System.out 出栈传入java/io/PrintStream.println
再看beep方法
public class Main {
      public staticvoid main(String[] args) {
           java.awt.Toolkit.getDefaultToolkit().beep();
      }
}
反编译
  Lastmodified 2019-9-20; size 355 bytes
  MD5checksum 7c26b26edfdde5f4bb8410a0f05bc289
Compiled from "Main.java"
public class Main
  minorversion: 0
  majorversion: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 =Methodref          #5.#14         //java/lang/Object."<init>":()V
   #2 =Methodref          #15.#16        //java/awt/Toolkit.getDefaultToolkit:()Ljava/awt/Toolkit;
   #3 =Methodref          #15.#17        // java/awt/Toolkit.beep:()V
   #4 =Class              #18            // Main
   #5 =Class              #19            // java/lang/Object
   #6 =Utf8               <init>
   #7 =Utf8               ()V
   #8 =Utf8               Code
   #9 =Utf8               LineNumberTable
  #10 =Utf8               main
  #11 =Utf8               ([Ljava/lang/String;)V
  #12 =Utf8               SourceFile
  #13 =Utf8               Main.java
  #14 =NameAndType        #6:#7          // "<init>":()V
  #15 =Class              #20            // java/awt/Toolkit
  #16 =NameAndType        #21:#22        //getDefaultToolkit:()Ljava/awt/Toolkit;
  #17 =NameAndType        #23:#7         // beep:()V
  #18 =Utf8               Main
  #19 =Utf8               java/lang/Object
  #20 =Utf8               java/awt/Toolkit
  #21 =Utf8               getDefaultToolkit
  #22 =Utf8               ()Ljava/awt/Toolkit;
  #23 =Utf8               beep
{
public Main();
   descriptor: ()V
    flags:ACC_PUBLIC
   Code:
     stack=1, locals=1, args_size=1
        0: aload_0
        1: invokespecial #1             //Method java/lang/Object."<init>":()V
        4: return
     LineNumberTable:
       line 1: 0
public static void main(java.lang.String[]);
   descriptor: ([Ljava/lang/String;)V
   flags: ACC_PUBLIC, ACC_STATIC
   Code:
     stack=1, locals=1, args_size=1
        0: invokestatic #2// Methodjava/awt/Toolkit.getDefaultToolkit:()Ljava/awt/Toolkit;
         3: invokevirtual #3              // Methodjava/awt/Toolkit.beep:()V
        6: return
     LineNumberTable:
       line 3: 0
       line 4: 6
}
invokestatic #2 调用java.awt.Toolkit.getDefaultToolkit()方法
invokevirtual #3 调用beep()函数

本机资源word文档
游客,如果您要查看本帖隐藏内容请回复


评分

参与人数 30HB +44 THX +13 收起 理由
lies + 1
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
虚心学习 + 1
行行行行行行 + 1
冷亦飞 + 1
别来无恙 + 1
我是好人 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
DeeDarrick + 1 [吾爱汇编论坛 52HB.COM]- 学破解防破解,知进攻懂防守!
徐闯 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
thunderiser + 1
三月十六 + 1
ldljlzw + 1
逆君 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
葡萄架下的女巫 + 1
zwj00544 + 1 + 1
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
playboy + 2
liugu0hai + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
消逝的过去 + 2 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
Shin + 1
firstcmm + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
cluo777 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
阿桂哥 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
yaxnyc + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
hetao8003200 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
dowdndx + 1 [通知]学破解论坛即将在近期更名为吾爱汇编论坛WWW.52HB.COM
豆0o0豆 + 1
Shark恒 + 20 + 1 [快捷评语]--你将受到所有人的崇拜!
GEEKCRACK + 1 + 1 [快捷评语]--你将受到所有人的崇拜!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
50311048 发表于 2019-9-20 23:29 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
豆0o0豆 发表于 2021-12-7 22:10 | 显示全部楼层

感谢分享呀
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
豆0o0豆 发表于 2021-12-19 00:04 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
bnjzzheng 发表于 2022-1-11 21:59 | 显示全部楼层

多谢分享。多谢
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
xujinwen 发表于 2022-1-12 20:11 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
越宝 发表于 2022-1-13 10:09 | 显示全部楼层

谢谢大佬!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hetao8003200 发表于 2022-1-13 11:09 | 显示全部楼层

感谢楼主分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
6378895 发表于 2022-1-13 12:22 | 显示全部楼层

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
越宝 发表于 2022-1-13 18:08 | 显示全部楼层

谢谢大佬!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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