Han Wang

58 papers A* 2Journal 55Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Commun. Lett.
Han Wang, Qiwei Fu, Ruhong Wen, Fangqing Wen, Xingwang Li
2026 J jnl
IEEE Commun. Surv. Tutorials
Bo Yang, Ruihuai Liang, Weixin Li, Han Wang, Xuelin Cao, Zhiwen Yu, Samson Lasaulce, Mérouane Debbah, Mohamed-Slim Alouini, H. Vincent Poor, Chau Yuen
2026 J jnl
IEEE Trans. Cogn. Commun. Netw.
Han Wang, Fangqing Wen, Xianpeng Wang, Wencai Du, Guan Gui
2026 A* conf
WWW
Minghui Ma, Bin Guo, Mengqi Chen, Jingqi Liu, Yasan Ding, Yan Liu, Han Wang
2025 J jnl
IEEE Trans. Veh. Technol.
Fangqing Wen, Han Wang, Guan Gui, Chau Yuen, Hikmet Sari, Fumiyuki Adachi
2025 J jnl
IEEE Internet Things J.
Han Wang, Qiulin Chen, Xianpeng Wang, Wencai Du, Xingwang Li, Arumugam Nallanathan
2025 J jnl
IEEE Wirel. Commun. Lett.
Han Wang, Kun Zhang, Qiwei Fu, Fangqing Wen, Xingwang Li
2025 J jnl
IEEE Trans. Veh. Technol.
Han Wang, Tianyu Yan, Nanrun Zhou, Xingwang Li, Fangqing Wen, Wencai Du
2025 J jnl
CoRR
Bo Yang, Ruihuai Liang, Weixin Li, Han Wang, Xuelin Cao, Zhiwen Yu, Samson Lasaulce, Mérouane Debbah, Mohamed-Slim Alouini, H. Vincent Poor, Chau Yuen
2025 J jnl
IEEE Internet Things J.
Xiaoxi Yi, Han Wang, Chi Zhang, Huiling Song, Ashit Kumar Dutta
2025 J jnl
IEEE Internet Things J.
Han Wang, Peiqing Guo, Xingwang Li, Fangqing Wen, Xianpeng Wang, Arumugam Nallanathan
2024 J jnl
Sensors
Ziyang Huang, Longcheng Yang, Weiqiang Tan, Han Wang
2024 J jnl
IEEE J. Biomed. Health Informatics
Baoru Han, Han Wang, Dawei Qiao, Jia Xu, Tianyu Yan
2024 J jnl
IEEE Trans. Intell. Transp. Syst.
Han Wang, Pingping Xiao, Xingwang Li
2024 J jnl
IEEE Trans. Wirel. Commun.
Fangqing Wen, Han Wang, Guan Gui, Hikmet Sari, Fumiyuki Adachi
2024 J jnl
IEEE Internet Things J.
Xingwang Li, Junyao Zhang, Congzheng Han, Wanming Hao, Ming Zeng, Zhengyu Zhu, Han Wang
2023 J jnl
Remote. Sens.
Zhe Zhang, Lei Zhang, Han Wang, Junpeng Shi
2023 A* conf
ACM Multimedia
Qiuyun Zhang, Bin Guo, Lina Yao, Han Wang, Ying Zhang, Zhiwen Yu
2023 J jnl
IEEE J. Biomed. Health Informatics
Baoru Han, Rutvij H. Jhaveri, Han Wang, Dawei Qiao, Jinglong Du
2023 J jnl
IEEE J. Sel. Areas Commun.
Min Deng, Zhiqiang Yao, Xingwang Li, Han Wang, Arumugam Nallanathan, Zeyang Zhang
2023 J jnl
J. Mobile Multimedia
Xingwang Li, Lingwei Xu, Han Wang
2023 J jnl
Digit. Commun. Networks
Han Wang, Fida Hussain Memon, Xianpeng Wang, Xingwang Li, Ning Zhao, Kapal Dev
2023 J jnl
Neural Comput. Appl.
Liang Zong, Han Wang, Wencai Du, Chenglin Zhao, GaoFeng Luo
2023 J jnl
IEEE Access
Cong Li, Xianpeng Wang, Jinmei Shi, Han Wang, Liangtian Wan
2023 J jnl
IEEE Trans. Ind. Informatics
Liang Zong, Dawei Qiao, Han Wang, Yong Bai
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Liang Zong, Han Wang, Yong Bai, GaoFeng Luo
2022 J jnl
Sensors
Ningjun Ruan, Han Wang, Fangqing Wen, Junpeng Shi
2022 J jnl
IEEE Trans. Ind. Informatics
Liang Zong, Fida Hussain Memon, Xingwang Li, Han Wang, Kapal Dev
2022 J jnl
Remote. Sens.
Lei Zhang, Han Wang, Fang-Qing Wen, Junpeng Shi
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Liang Zong, Han Wang, GaoFeng Luo
2021 J jnl
Wirel. Commun. Mob. Comput.
Guicai Yu, Han Wang, Wencai Du
2021 J jnl
IEEE Trans. Ind. Informatics
Han Wang, Lingwei Xu, Zhengqiang Yan, T. Aaron Gulliver
2021 J jnl
IEEE Internet Things J.
Lingwei Xu, Han Wang, T. Aaron Gulliver
2021 J jnl
Neural Comput. Appl.
Lingwei Xu, Han Wang, Hui Li, Wenzhong Lin, T. Aaron Gulliver
2021 conf
CSII
Han Wang, Shasha Lv, Shaobin Li, Wencai Du, Li Qinggu, Bo Wang
2021 J jnl
Comput. Commun.
Han Wang, Xingwang Li, Rutvij H. Jhaveri, Thippa Reddy Gadekallu, Mingfu Zhu, Tariq Ahamed Ahanger, Sunder Ali Khowaja
2021 J jnl
Wirel. Commun. Mob. Comput.
Liang Zong, Han Wang, Liangpeng Lu, Yong Bai, Chenglin Zhao, GaoFeng Luo, Feng Lin
2020 J jnl
Neural Comput. Appl.
Lingwei Xu, Jingjing Wang, Han Wang, T. Aaron Gulliver, Khoa N. Le
2020 J jnl
Wirel. Commun. Mob. Comput.
Han Wang, Wencai Du, Xianpeng Wang, Guicai Yu, Lingwei Xu
2020 J jnl
IEEE Access
Guanqun Sheng, Han Wang, Fangqing Wen, Xinhai Wang
2020 J jnl
IEEE Access
Yu Qiao, Han Wang, Xianpeng Wang, Mengxing Huang, Liangtian Wan, Di Wu
2020 J jnl
IEEE Access
Han Wang, Lingwei Xu, Ye Tao, Xianpeng Wang
2020 J jnl
Mob. Networks Appl.
Lingwei Xu, Xu Yu, Han Wang, Xinli Dong, Yun Liu, Wenzhong Lin, Xinjie Wang, Jingjing Wang
2019 J jnl
IEEE Access
Lingwei Xu, Han Wang, Wen Lin, Thomas Aaron Gulliver, Khoa N. Le
2019 J jnl
Sensors
Han Wang, Lingwei Xu, Xianpeng Wang
2019 J jnl
Phys. Commun.
Lingwei Xu, Lingling Huang, Conghui Cao, Han Wang, Ye Li, T. Aaron Gulliver
2019 J jnl
J. Signal Process. Syst.
Lingwei Xu, Han Wang, Yun Liu, T. Aaron Gulliver
2019 J jnl
IEEE Access
Han Wang, Lingwei Xu, Wenzhong Lin, Pingping Xiao, Ruhong Wen
2018 J jnl
Inf.
Han Wang
2018 J jnl
Inf.
Han Wang, Jianqing Liao, Lingwei Xu, Xianpeng Wang
2018 J jnl
IEEE Access
Han Wang, Lingwei Xu, Xianpeng Wang, Sohail Taheri
2018 J jnl
IEEE Access
Han Wang
2016 J jnl
Sensors
Han Wang, Wencai Du, Lingwei Xu
2016 J jnl
KSII Trans. Internet Inf. Syst.
Lingwei Xu, Jingjing Wang, Han Wang, T. Aaron Gulliver
2016 J jnl
IEEE Access
Han Wang, Xianpeng Wang, Lingwei Xu, Wencai Du
2016 J jnl
J. Commun.
Han Wang, Yani Cui, Wencai Du, Lingwei Xu
2016 J jnl
KSII Trans. Internet Inf. Syst.
Han Wang, Wencai Du, Lingwei Xu
2015 J jnl
J. Commun.
Han Wang, Wencai Du, Xing Chen
redb/extractors/decompiler/_archive/GhidraDecompilerScript-latest.java
← Index redb/extractors/decompiler/_archive/GhidraDecompilerScript-latest.java java
import ghidra.app.script.GhidraScript;
import ghidra.program.model.listing.*;
import ghidra.app.decompiler.*;
import ghidra.program.model.block.*;
import ghidra.program.model.symbol.*;
import ghidra.program.model.pcode.*;
import ghidra.program.model.address.*;
import org.json.JSONObject;
import org.json.JSONArray;
import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;

public class GhidraDecompilerScript extends GhidraScript {
    private DecompInterface decompInterface;
    private BasicBlockModel basicBlockModel;
    
    @Override
    public void run() throws Exception {
        // Get binary hash and filepath from arguments
        String[] args = getScriptArgs();
        if (args.length < 2) {
            System.err.println("{\"error\": \"Both SHA256 and filepath arguments are required\"}");
            return;
        }
        String sha256 = args[0];
        String filepath = args[1];

        // Initialize analysis components
        setupDecompiler();
        basicBlockModel = new BasicBlockModel(currentProgram);

        // Create the main JSON object for output
        JSONObject output = new JSONObject();
        output.put("sha256", sha256);
        output.put("decompiled", new JSONArray());
        output.put("disassembled", new JSONArray());
        output.put("cfg", new JSONArray());

        // Process all functions
        FunctionIterator functions = currentProgram.getFunctionManager().getFunctions(true);
        for (Function function : functions) {
            processFunction(function, output);
        }

        // Output the final JSON to stdout
        System.out.println(output.toString());
    }

    private void setupDecompiler() {
        decompInterface = new DecompInterface();
        DecompileOptions options = new DecompileOptions();
        decompInterface.setOptions(options);
        decompInterface.openProgram(currentProgram);
    }

    private void processFunction(Function function, JSONObject output) {
        Address entry = function.getEntryPoint();
        String functionName = function.getName();
        String functionAddress = entry.toString();

        // Process decompiled code
        processDecompiledCode(function, output.getJSONArray("decompiled"), 
                            functionName, functionAddress);

        // Process disassembled code
        processDisassembledCode(function, output.getJSONArray("disassembled"), 
                              functionName, functionAddress);

        // Process CFG
        processCFG(function, output.getJSONArray("cfg"), functionAddress);
    }

    private void processDecompiledCode(Function function, JSONArray decompArray, 
                                     String functionName, String functionAddress) {
        DecompileResults results = decompInterface.decompileFunction(function, 30, monitor);
        if (results.decompileCompleted()) {
            String decompiledCode = results.getDecompiledFunction().getC();
            String contentHash = calculateHash(decompiledCode);

            JSONObject functionObj = new JSONObject();
            functionObj.put("decompiled_content_hash", contentHash);
            functionObj.put("decompiled_function_name", functionName);
            functionObj.put("decompiled_function_address", functionAddress);
            functionObj.put("decompiled_function", decompiledCode);
            
            decompArray.put(functionObj);
        }
    }

    private void processDisassembledCode(Function function, JSONArray disasmArray, 
                                       String functionName, String functionAddress) {
        try {
            StringBuilder disassembly = new StringBuilder();
            StringBuilder normalized = new StringBuilder();
            int instructionCount = 0;

            Listing listing = currentProgram.getListing();
            AddressSetView functionBody = function.getBody();
            InstructionIterator instructions = listing.getInstructions(functionBody, true);

            while (instructions.hasNext()) {
                try {
                    Instruction instr = instructions.next();
                    String disasmLine = instr.toString();
                    disassembly.append(disasmLine).append("\n");
                    normalized.append(normalizeInstruction(disasmLine)).append("\n");
                    instructionCount++;
                } catch (Exception e) {
                    System.err.println("Error processing instruction in " + functionName + ": " + e.getMessage());
                }
            }

            String disassembledCode = disassembly.toString();
            String contentHash = calculateHash(disassembledCode);

            JSONObject functionObj = new JSONObject();
            functionObj.put("disassembled_content_hash", contentHash);
            functionObj.put("disassembled_function_name", functionName);
            functionObj.put("disassembled_function_address", functionAddress);
            functionObj.put("disassembled_function", disassembledCode);
            functionObj.put("normalized_disassembly", normalized.toString());
            functionObj.put("instruction_count", instructionCount);

            // Set similarity-related fields to null for now
            functionObj.put("minhash_signature", JSONObject.NULL);
            functionObj.put("opcode_frequency_vector", JSONObject.NULL);
            functionObj.put("api_calls_vector", JSONObject.NULL);
            functionObj.put("instruction_embedding", JSONObject.NULL);

            disasmArray.put(functionObj);
        } catch (Exception e) {
            System.err.println("Error processing disassembly for " + functionName + ": " + e.getMessage());
        }
    }

    private void processCFG(Function function, JSONArray cfgArray, String functionAddress) {
        try {
            CodeBlockIterator blocks = basicBlockModel.getCodeBlocksContaining(
                function.getBody(), monitor);

            while (blocks.hasNext()) {
                CodeBlock block = blocks.next();
                String blockInstructions = getBlockInstructions(block);
                String blockId = calculateHash(blockInstructions);

                JSONObject blockObj = new JSONObject();
                blockObj.put("block_id", blockId);
                blockObj.put("function_address", functionAddress);
                blockObj.put("block_instructions", blockInstructions);

                // Get successor blocks
                CodeBlockReferenceIterator successors = block.getDestinations(monitor);
                JSONArray successorAddresses = new JSONArray();
                while (successors.hasNext()) {
                    CodeBlockReference ref = successors.next();
                    successorAddresses.put(ref.getDestinationAddress().toString());
                }
                blockObj.put("successor_blocks", successorAddresses);

                cfgArray.put(blockObj);
            }
        } catch (Exception e) {
            System.err.println("{\"error\": \"Error processing CFG: " + 
                             e.getMessage().replace("\"", "'") + "\"}");
        }
    }

    private String normalizeInstruction(String instruction) {
        return instruction.replaceAll("0x[0-9a-fA-F]+", "IMM")
                        .replaceAll("\\b\\d+\\b", "NUM");
    }

    private String getBlockInstructions(CodeBlock block) {
        StringBuilder instructions = new StringBuilder();
        AddressIterator addresses = block.getAddresses(true);
        while (addresses.hasNext()) {
            Address addr = addresses.next();
            Instruction instr = currentProgram.getListing().getInstructionAt(addr);
            if (instr != null) {
                instructions.append(instr.toString()).append("\n");
            }
        }
        return instructions.toString();
    }

    private String calculateHash(String content) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(content.getBytes(StandardCharsets.UTF_8));
            StringBuilder hexString = new StringBuilder();
            for (byte b : hash) {
                hexString.append(String.format("%02x", b));
            }
            return hexString.toString();
        } catch (Exception e) {
            System.err.println("{\"error\": \"Error calculating hash\"}");
            return "";
        }
    }
}