Giter VIP home page Giter VIP logo

uniref's Introduction

uniref

中文 | English

uniref 是一个辅助分析 Unity 应用的框架。它可以帮助您获取 Unity 应用中的类、方法、成员变量等的反射信息,让您实时地查看和操作它们。

您可以将您的一些分析结果借助本框架转化为少量的 Python 代码,在一定程度上方便您进行 Unity 应用的插件开发。

特性

  • 支持通过符号获取反射信息
  • 支持实时获取与修改类属性值
  • 支持实时获取与修改类方法实现、调用类方法
  • 在内存中完成修改,无需修改源文件
  • 可以绕过某些代码保护机制(压缩、加密壳等),减少繁琐的逆向分析过程
  • 支持分析 MonoIL2CPP 两种脚本后端(Unity scripting backend)
  • 支持分析 Windows x86 64 位Android ARM架构上运行的 32 / 64 位 Unity 应用

安装

uniref 需要 Windows Python 3.7+(64 位)的运行环境,您可以通过 pip 完成安装:

pip install -U uniref

示例

下方给出了一段使用 uniref 框架完成的代码,其解决了 MRCTF2021 的一道逆向赛题。

from uniref import WinUniRef

ref = WinUniRef("GameHack.exe")
class_GetFlag = ref.find_class_in_image("Assembly-CSharp.dll", "Platformer.Flag.GetFlag")
class_GetFlag.find_field("goHome").value = True
class_GetFlag.find_field("findAlien").value = True
class_GetFlag.find_field("eatCookie").value = True

method_EatTokenUpdateKey = class_GetFlag.find_method("EatTokenUpdateKey")
for i in range(105):
    method_EatTokenUpdateKey()

文档 中还给出了分析 森林之子鹅鸭杀Dream Blast神庙逃亡等应用的示例代码。

参与进来

如果您有什么建议或需求,欢迎提 issue

当然,如果您有兴趣一起完善这个框架,欢迎提交 Pull requests

开源协议

GNU Affero General Public License v3.0

uniref's People

Contributors

in1nit1t avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

uniref's Issues

[CloseHandle] error code: 6

Hello, for some reason, the descriptor closes with error 6
Here is my script for the DEVOUR game in Python:

def GetListAssemblies(ref: WinUniRef):
    list_asm = ref.list_assemblies()
    print("LIST ASSEMBLIES --> \n", list_asm) #Getting List Assemblies
def ScriptFlashlight(ref: WinUniRef):
    if ref.use_il2cpp():
        nolan_beh = ref.find_class_in_image("Assembly-CSharp.dll", "NolanBehaviour")
        offset_flashlight_fieldrange = nolan_beh.find_field("initialFlashlightRange")
        type_name_field = nolan_beh.find_field("initialFlashlightRange").type_name
        type_flashlight = offset_flashlight_fieldrange.field_type
        print("FLASHLIGHT FIELD TYPE: ", type_name_field) #If you See System.Single it's float :D
        if offset_flashlight_fieldrange.is_static():
            print("Field Is Static")
        else:
            if offset_flashlight_fieldrange.is_const():
                print("Field Offset is Const")
            else:
                addresses = nolan_beh.guess_instance_address()
                for addr in addresses:
                    nolan_beh.instance = addr
                    
if __name__ == "__main__":
    xxx = WinUniRef("DEVOUR.exe")
    GetListAssemblies(xxx)
    print("Trying To Initializating Flashlight Range Address...")
    ScriptFlashlight(xxx)

idk, why is CloseHandle Error 6, but for some reason it seems to me that this is due to a 32-bit process. Pls Help Me :)

AttributeError: 'NoneType' object has no attribute 'find_method'

from uniref import WinUniRef
import win32api
import win32com
import win32ctypes
import ctypes
def GetCurrentProcess(processname : str):
    return WinUniRef("{}.exe".format(processname))

def Main():
    uniref_func = GetCurrentProcess("CrushCrush")
    diamonds = uniref_func.find_class_in_image("Assembly-CSharp.dll", "Utilities") #Award Diamonds is Static Bool... So You Can Get Function EASILY!!!
    AwardDiamonds = diamonds.find_method(method_name="AwardDiamonds", param_count=2)
    if AwardDiamonds.is_static() is True:
        AwardDiamonds(args=[4000000, True])
    else:
        print("Failed to Get Static Address")
        exit(5003)
if __name__ == "__main__":
    Main()

I'm Get This Error when This Library is Trying Finding Method

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.