没事看了个游戏,虽然我是ios的但是android 不分区,直接去下了一个gpk(还是头一回看见有gpk后缀文件。。孤陋寡闻了)和普通apk一样zip解压


继续解压application.apk


dex2jar

发现是unity3d的

直接去application\assets\bin\Data\Managed 下反编译Assembly-CSharp.dll
反编译软件报错,说不是正常的dos文件。通过查看Assembly-CSharp.dll的是文件头发现不是正常的文件头应该被加密过的。

当时心里就表示毙了狗。不过很快就发现了应该只是对十六进制做了普通的字符串加密,并不是加壳等。

随便找了个dll文件做对比

直接把文件拉到最下端。


发现应该被00填充的地方加密文件都被95 CC 8E 8F 90 9C B7 87

这8个填充了,感觉有可能是异或文件操作。

直接拉到最上端取8个字节(因为文件头应该是相似的),对字符串做异或操作。


异或后的结果应该是正常的文件头。猜测每隔8位异或95 CC 8E 8F 90 9C B7 87 应该就能成功恢复

Imports System.IO
Module Module1
    Sub Main()
        Try
            Dim fs As New FileStream("C:\Users\forxu\Desktop\Assembly-CSharp.dll", FileMode.Open, FileAccess.Read)
            Dim fw As New FileStream("C:\Users\forxu\Desktop\Assembly-CSharp-decode.dll", FileMode.OpenOrCreate, FileAccess.Write)
            Dim br As New BinaryReader(fs)
            Dim bw As New BinaryWriter(fw)
            Dim length As Integer = fs.Length
            Dim keys As Byte() = New Byte() {&H95, &HCC, &H8E, &H8F, &H90, &H9C, &HB7, &H87}
            Dim output As Byte() = New Byte(length) {}
            Dim index = 0
            Dim keyindex = 0
            While length > 0
                Try
                    output(keyindex) = br.ReadByte() Xor keys(index)
                Catch ex As Exception
                    Console.WriteLine(ex.Message)
                End Try
                length -= 1
                If index = keys.Length - 1 Then
                    index = 0
                Else
                    index += 1
                End If
                keyindex += 1
            End While
            bw.Write(output)
            fs.Close()
            br.Close()
            bw.Flush()
            bw.Close()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Sub
End Module

Comments
Write a Comment