返回列表 发新帖

[悬赏求助] java代码功能解析

[复制链接]

15

主题

498

帖子

1123

积分

高中生

Rank: 4

金币
189
好评
2
贡献
0

MT论坛帅哥MT论坛新人考神MT论坛最佳新人

发表在  2021-7-10 10:43:13 | 显示全部楼层 | 阅读模式
35金币
本帖最后由 陈墨 于 2021-7-10 11:11 编辑

分析某软件时,发现他是在软件本地写了一串字符串,然后调用了decode方法来解密找到正确网址
java跟方法如下,想知道是如何解出来的

.method public static decode(Ljava/lang/String;)Ljava/lang/String;
    .registers 9
    .param p0, "str"  # Ljava/lang/String;

    .line 72
    new-instance v0, Ljava/io/ByteArrayOutputStream;

    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v1

    div-int/lit8 v1, v1, 0x2

    invoke-direct {v0, v1}, Ljava/io/ByteArrayOutputStream;-><init>(I)V

    .line 73
    .line 75
    .local v0, "baos":Ljava/io/ByteArrayOutputStream;
    const/4 v1, 0x0

    const/4 v2, 0x0

    .local v2, "i":I
    :goto_d
    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v3

    if-ge v2, v3, :cond_32

    .line 76
    const-string v3, "0123456789ABCDEF"

    invoke-virtual {p0, v2}, Ljava/lang/String;->charAt(I)C

    move-result v4

    invoke-virtual {v3, v4}, Ljava/lang/String;->indexOf(I)I

    move-result v3

    shl-int/lit8 v3, v3, 0x4

    const-string v4, "0123456789ABCDEF"

    add-int/lit8 v5, v2, 0x1

    invoke-virtual {p0, v5}, Ljava/lang/String;->charAt(I)C

    move-result v5

    invoke-virtual {v4, v5}, Ljava/lang/String;->indexOf(I)I

    move-result v4

    or-int/2addr v3, v4

    invoke-virtual {v0, v3}, Ljava/io/ByteArrayOutputStream;->write(I)V

    .line 75
    add-int/lit8 v2, v2, 0x2

    goto :goto_d

    .line 77
    .end local v2  # "i":I
    :cond_32
    invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B

    move-result-object v2

    .line 78
    .local v2, "b":[B
    array-length v3, v2

    .line 79
    .local v3, "len":I
    sget-object v4, Lobfuse/NPStringFog;->KEY:Ljava/lang/String;

    invoke-virtual {v4}, Ljava/lang/String;->length()I

    move-result v4

    .line 80
    .local v4, "keyLen":I
    nop

    .local v1, "i":I
    :goto_3e
    if-ge v1, v3, :cond_51

    .line 81
    aget-byte v5, v2, v1

    sget-object v6, Lobfuse/NPStringFog;->KEY:Ljava/lang/String;

    rem-int v7, v1, v4

    invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C

    move-result v6

    xor-int/2addr v5, v6

    int-to-byte v5, v5

    aput-byte v5, v2, v1

    .line 80
    add-int/lit8 v1, v1, 0x1

    goto :goto_3e

    .line 83
    .end local v1  # "i":I
    :cond_51
    new-instance v1, Ljava/lang/String;

    invoke-direct {v1, v2}, Ljava/lang/String;-><init>([B)V

    return-object v1
.end method


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

这是np管理器的算法吧? KEY = " npmanager " ; // 取密文一半长度 ByteArrayOutputStream baos = new ByteArrayOutputStream ( str . length ( ) / 2 ) : //进入for循环,按2的倍数进行循环 for ( int i 0 ; i < str . length () : i + = 2 ) { //如果密文里按2的倍数的位置里的内容左移4位后包含012345678ABCDEF 则写入 //左移4位 方程式 密文×2^4 baos . write ( ( 0123456789ABCDEF " . indexOf ( str . cha ...
回复

使用道具 举报

17

主题

835

帖子

4081

积分

大学生

Rank: 5Rank: 5

金币
1385
好评
156
贡献
14

MT论坛新人MT论坛最佳新人MT论坛活跃会员

发表于 2021-7-10 10:43:14 来自手机  | 显示全部楼层
这是np管理器的算法吧?
KEY = " npmanager " ;

// 取密文一半长度
ByteArrayOutputStream baos = new
ByteArrayOutputStream ( str . length ( ) / 2 ) :

//进入for循环,按2的倍数进行循环
for ( int i 0 ; i < str . length () : i + = 2 ) {

    //如果密文里按2的倍数的位置里的内容左移4位后包含012345678ABCDEF 则写入
//左移4位 方程式 密文×2^4
   baos . write ( ( 0123456789ABCDEF " .
   indexOf ( str . charAt (i) ) < < 4 ) |
   
//或如果i+1后的内容包含0123456789ABCDEF 也写入
   0123456789ABCDEF " . indexOf ( str . charAt ( i +
   1 ) ) :

//取密文byte数组
byte[] b = baos . toByteArray;
//byte数组长度
int len = b . length ;
//取key长度  key = npmanager
int keyLen = KEY . length () ;
//进入for循环
for ( int i2 = 0 ; i2 < len ; i2 + + ) {

//密文与key做异或
//key当前循环数/key长度后的余数
//比如余数=2 则取m与密文做异或
b [ i2 ] = ( byte ) ( b [ i2 ] ^ KEY .
charAt ( i2 % keyLen ) :

//最后byte实例化到字符串
return new String ( b ) ;
回复

使用道具 举报

114

主题

6137

帖子

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
366
好评
94
贡献
1

MT论坛最佳新人考神MT论坛活跃会员MT论坛侠客MT论坛新人

QQ
发表于 2021-7-10 11:42:47 来自手机  | 显示全部楼层
直接打印log
回复

使用道具 举报

16

主题

1188

帖子

3904

积分

大学生

Rank: 5Rank: 5

金币
2004
好评
8
贡献
0
QQ
发表于 2021-7-10 12:20:09 来自手机  | 显示全部楼层
这是用np管理器加的字符串加密,mt有一个字符串解密功能,你可以试一下,还有这个解密方法不都已经写出来了吗,是找到了看不懂吗?
回复

使用道具 举报

44

主题

2449

帖子

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
10097
好评
175
贡献
0

考神MT论坛活跃会员MT论坛最佳新人MT论坛帅哥MT论坛侠客

发表于 2021-7-10 12:26:18 来自手机  | 显示全部楼层
壹元 发表于 2021-7-10 12:20
这是用np管理器加的字符串加密,mt有一个字符串解密功能,你可以试一下,还有这个解密方法不都已经写出来了 ...

说的没错,他找是找到了但是看不懂java代码
回复

使用道具 举报

44

主题

2449

帖子

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
10097
好评
175
贡献
0

考神MT论坛活跃会员MT论坛最佳新人MT论坛帅哥MT论坛侠客

发表于 2021-7-10 12:27:58 来自手机  | 显示全部楼层
楼主,给你提个建议,先去补java基础,再来看java代码
回复

使用道具 举报

1

主题

365

帖子

3210

积分

大学生

Rank: 5Rank: 5

金币
1000
好评
1
贡献
0
发表于 2021-7-10 12:43:43 来自手机  | 显示全部楼层
表示看不懂
回复

使用道具 举报

17

主题

835

帖子

4081

积分

大学生

Rank: 5Rank: 5

金币
1385
好评
156
贡献
14

MT论坛新人MT论坛最佳新人MT论坛活跃会员

发表于 2021-7-10 13:19:23 来自手机  | 显示全部楼层
下次关于算法的问题 最好贴出来的是java语法 而不是smali语法  还好我手机有ocr 不然我都懒得写了
回复

使用道具 举报

44

主题

2449

帖子

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
10097
好评
175
贡献
0

考神MT论坛活跃会员MT论坛最佳新人MT论坛帅哥MT论坛侠客

发表于 2021-7-10 14:53:49 来自手机  | 显示全部楼层
dayeve 发表于 2021-7-10 13:19
下次关于算法的问题 最好贴出来的是java语法 而不是smali语法  还好我手机有ocr 不然我都懒得写了 ...

说实话你写出来这些他一样看不明白,不如让他去补基础,学完循环,数组,异或运算,也不至于什么都看不懂了
回复

使用道具 举报

15

主题

498

帖子

1123

积分

高中生

Rank: 4

金币
189
好评
2
贡献
0

MT论坛帅哥MT论坛新人考神MT论坛最佳新人

发表于 2021-7-10 15:29:38 | 显示全部楼层
dayeve 发表于 2021-7-10 10:43
这是np管理器的算法吧?
KEY = " npmanager " ;

谢谢大佬
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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