Weijun Xu

64 papers B 3C 1Misc 4Journal 43Unranked 13
YearRankTypeTitle / Venue / Authors
2025 J jnl
Adv. Eng. Informatics
Yulang Liu, Jinglong Chen, Weijun Xu
2025 J jnl
J. Comput. Aided Mol. Des.
Padmanabhan Anbazhagan, Jothi Anantharajan, Justina Fulwood, Choon Heng Low, Nithya Baburajendran, Klement Foo, Weijun Xu
2024 conf
ICSRS
Zongyao Wang, Wei ShangGuan, Weijun Xu, Cong Peng, Yulong Xing, Enrico Zio
2024 conf
ICSRS
Haoran Liu, Weijun Xu, Qingyuan Zhang, Xiaoyang Li, Enrico Zio, Rui Kang
2024 J jnl
Eur. J. Oper. Res.
Yannan Zhong, Weijun Xu, Hongyi Li, Weiwei Zhong
2024 conf
DASFAA (4)
Weijun Xu, Fan Gao, Jinsong Su, Qingqiang Wu, Meihong Wang
2024 J jnl
IEEE Trans. Comput. Soc. Syst.
Haiming Liang, Weijun Xu, Francisco Chiclana, Shui Yu, Yucheng Dong, Enrique Herrera-Viedma
2024 J jnl
Int. J. Fuzzy Syst. Appl.
Zhiming Zeng, Weijun Xu, Yannan Zhong
2024 J jnl
Int. J. Comput. Intell. Syst.
Zhiming Zeng, Weijun Xu, Zijin Peng, Yannan Zhong
2024 J jnl
J. Imaging Inform. Medicine
Fenglin Cai, Jiaying Wen, Fangzhou He, Yulong Xia, Weijun Xu, Yong Zhang, Li Jiang, Jie Li
2023 conf
ICSRS
Weijun Xu, Enrico Zio
2023 J jnl
Stat. Anal. Data Min.
Weijun Xu, Zhineng Fu, Hongyi Li, Jinglong Huang, Weidong Xu, Yiyang Luo
2023 J jnl
Eng. Appl. Artif. Intell.
Hengjie Zhang, Xiaomin Wang, Weijun Xu, Yucheng Dong
2023 conf
PAKDD (3)
Weijun Xu, Han Li, Meihong Wang
2021 J jnl
SIAM J. Math. Anal.
Chenjie Fan, Weijun Xu
2021 J jnl
Briefings Bioinform.
Shijie Qin, Weijun Xu, Canbiao Wang, Sizhu Jiang, Wei Dai, Yang Yang, Jiawei Shen, Ping Jin, Fei Ma, Xinyi Xia
2021 J jnl
Knowl. Based Syst.
Zhineng Fu, Weijun Xu, Ruiqi Hu, Guodong Long, Jing Jiang
2021 J jnl
Int. J. Mach. Learn. Cybern.
Zehai Gao, Cunbao Ma, Jianfeng Zhang, Weijun Xu
2020 J jnl
Inf. Fusion
Xin Chen, Haiming Liang, Yuan Gao, Weijun Xu
2020 J jnl
J. Oper. Res. Soc.
Xin Chen, Weijun Xu, Haiming Liang, Yucheng Dong
2019 J jnl
Comput. Ind. Eng.
Weijun Xu, Shaoying Huang, Jia Li
2019 J jnl
Soft Comput.
Yong Zhang, Weiguo Zhang, Xingyu Yang, Weijun Xu
2019 J jnl
IEEE Access
Zehai Gao, Cunbao Ma, Jianfeng Zhang, Weijun Xu
2018 J jnl
Int. J. Uncertain. Fuzziness Knowl. Based Syst.
Weijun Xu, Guifang Liu, Xiaojian Yu
2018 J jnl
Inf. Process. Lett.
Xiaoli Chen, Weijun Xu
2018 J jnl
Soft Comput.
Hengjie Zhang, Xin Chen, Yucheng Dong, Weijun Xu, Shihua Wang
2018 J jnl
Asymptot. Anal.
Yu Gu, Weijun Xu
2017 J jnl
RAIRO Theor. Informatics Appl.
Maolin Hu, Weijun Xu
2017 Misc conf
FAW
Xiaoli Chen, Weijun Xu
2017 J jnl
Int. J. Fuzzy Syst.
Weijun Xu, Guifang Liu, Hongyi Li, Weiqiang Luo
2017 J jnl
Int. J. Syst. Sci.
Weijun Xu, Rongxin Jiang, Li Xie, Xiang Tian, Yaowu Chen
2016 conf
ICNC-FSKD
Wei Sun, Weiguo Zhang, Weijun Xu
2015 J jnl
Int. J. Fuzzy Syst.
Weijun Xu, Xiong Deng, Jia Li
2015 J jnl
Appl. Math. Comput.
Ting Li, Weiguo Zhang, Weijun Xu
2015 Misc conf
ICNC
Xiong Deng, Weijun Xu, Jia Li, Ting Li
2015 J jnl
J. Intell. Fuzzy Syst.
Yejun Xu, Feng Ma, Weijun Xu, Huimin Wang
2015 Misc conf
ICNC
Wei Sun, Weiguo Zhang, Weijun Xu
2015 J jnl
J. Chem. Inf. Model.
Weijun Xu, Junxian Lim, Chai-Yeen Goh, Jacky Y. Suen, Yuhong Jiang, Mei-Kwan Yau, Kai-Chen Wu, Ligong Liu, David P. Fairlie
2015 J jnl
J. Chem. Inf. Model.
Samuel R. Perry, Weijun Xu, Anna Wirija, Junxian Lim, Mei-Kwan Yau, Martin J. Stoermer, Andrew J. Lucke, David P. Fairlie
2014 B conf
SMC
Yejun Xu, Wancheng Zhang, Weijun Xu, Huimin Wang
2014 J jnl
Fuzzy Sets Syst.
Wei-Guo Zhang, Yong-Jun Liu, Weijun Xu
2013 J jnl
J. Appl. Probab.
Yunjiang Jiang, Weijun Xu
2012 J jnl
Appl. Math. Comput.
Weiguo Zhang, Yong Zhang, Xingyu Yang, Weijun Xu
2012 J jnl
Eur. J. Oper. Res.
Wei-Guo Zhang, Yong-Jun Liu, Weijun Xu
2012 J jnl
Autom.
Yong-Jun Liu, Wei-Guo Zhang, Weijun Xu
2012 conf
ISIE
Weijun Xu, Rongxin Jiang, Yaowu Chen
2012 J jnl
Inf. Process. Lett.
Xingyu Yang, Weiguo Zhang, Yong Zhang, Weijun Xu
2012 J jnl
Comput. Math. Appl.
Yong Zhang, Weiguo Zhang, Weijun Xu, Xingyu Yang
2011 J jnl
Inf. Process. Lett.
Yong Zhang, Weiguo Zhang, Weijun Xu, Hongyi Li
2011 J jnl
Expert Syst. Appl.
Xili Zhang, Wei-Guo Zhang, Weijun Xu
2011 J jnl
Math. Comput. Model.
Yong Zhang, Weiguo Zhang, Weijun Xu, Hongyi Li
2010 J jnl
Math. Comput. Model.
Weijun Xu, Weidong Xu, Hongyi Li, Weiguo Zhang
2010 J jnl
Int. J. Uncertain. Fuzziness Knowl. Based Syst.
Weijun Xu, Weidong Xu, Hongyi Li, Weiguo Zhang
2009 conf
CSO (1)
Jinhong Xu, Weidong Xu, Weijun Xu
2008 B conf
IEEE Congress on Evolutionary Computation
Weijun Xu, Yucheng Dong, Weilin Xiao, Jinhong Xu
2008 B conf
IEEE Congress on Evolutionary Computation
Jinhong Xu, Weijun Xu, Jinling Li, Yucheng Dong
2007 J jnl
J. Glob. Optim.
Yinfeng Xu, Weijun Xu, Hongyi Li
2007 Misc conf
FAW
Yucheng Dong, Yinfeng Xu, Weijun Xu
2007 conf
FSKD (2)
Weijun Xu, Yucheng Dong, Maolin Hu
2006 C conf
CSCWD
Qiu Chen, Jun Shen, Yongqiang Dong, Jiangpeng Dai, Weijun Xu
2005 conf
WINE
Maolin Hu, Yinfeng Xu, Weijun Xu
2005 conf
FSKD (1)
Xun Wang, Weijun Xu, Wei-Guo Zhang, Maolin Hu
2004 conf
ISNN (1)
Jianjun Wang, Zongben Xu, Weijun Xu
2004 conf
ISNN (2)
Yinfeng Xu, Weijun Xu
tests/unit/test_apk_method_extractor.py
← Index tests/unit/test_apk_method_extractor.py python
"""
Unit tests for APK method-level content extraction, hashing, and similarity.

Tests SHA-256 normalization, ssdeep/TLSH computation, obfuscation detection,
and Dalvik-to-Java type conversion.
"""
import pytest

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


class TestHashingFunctions:
    """Tests for hashing utility functions."""

    def test_sha256_deterministic(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        h1 = compute_sha256("invoke-virtual {p0}, Lcom/Foo;->bar()V")
        h2 = compute_sha256("invoke-virtual {p0}, Lcom/Foo;->bar()V")
        assert h1 == h2

    def test_sha256_hex_length(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        assert len(compute_sha256("test")) == 64

    def test_sha256_different_inputs(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        assert compute_sha256("aaa") != compute_sha256("bbb")

    def test_ssdeep_none_for_short(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_ssdeep
        assert compute_ssdeep("short") is None

    def test_tlsh_none_for_short(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_tlsh
        assert compute_tlsh("x") is None


class TestObfuscationDetection:
    """Tests for obfuscation indicator detection."""

    def test_short_method_name_single_char(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("a", "Lcom/Foo;", "", 10)
        assert r["short_method_name"] is True

    def test_short_method_name_two_chars(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("ab", "Lcom/Foo;", "", 10)
        assert r["short_method_name"] is True

    def test_normal_method_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("onCreate", "Lcom/Foo;", "", 10)
        assert r["short_method_name"] is False

    def test_short_class_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("foo", "Lcom/a;", "", 10)
        assert r["short_class_name"] is True

    def test_normal_class_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("foo", "Lcom/example/MainActivity;", "", 10)
        assert r["short_class_name"] is False

    def test_string_encryption_detected(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = (
            'const-string v0, "xyz"\n'
            'invoke-static {v0}, Lcom/Enc;->decrypt(Ljava/lang/String;)Ljava/lang/String;\n'
        )
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_string_encryption"] is True

    def test_no_string_encryption(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'const-string v0, "hello"\ninvoke-virtual {v0}, Ljava/lang/String;->length()I'
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_string_encryption"] is False

    def test_reflection_detected(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'invoke-virtual {v0, v1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;'
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_reflection_calls"] is True

    def test_no_reflection(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'invoke-virtual {p0}, Lcom/Foo;->bar()V'
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_reflection_calls"] is False

    def test_excessive_goto_detected(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "\n".join(["goto :label"] * 10)
        # threshold = max(5, 20*0.15=3) = 5, 10 > 5
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 20)
        assert r["excessive_goto_count"] is True

    def test_no_excessive_goto(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "goto :label\nreturn-void"
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 100)
        assert r["excessive_goto_count"] is False

    def test_goto_16_counted(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "\n".join(["goto/16 :label"] * 10)
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 20)
        assert r["excessive_goto_count"] is True


class TestDalvikTypeConversion:
    """Tests for Dalvik-to-Java type conversion."""

    def test_void(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("V") == "void"

    def test_primitives(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("I") == "int"
        assert dalvik_type_to_java("Z") == "boolean"
        assert dalvik_type_to_java("J") == "long"
        assert dalvik_type_to_java("F") == "float"
        assert dalvik_type_to_java("D") == "double"
        assert dalvik_type_to_java("B") == "byte"
        assert dalvik_type_to_java("S") == "short"
        assert dalvik_type_to_java("C") == "char"

    def test_object_type(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("Ljava/lang/String;") == "String"
        assert dalvik_type_to_java("Lcom/example/Foo;") == "Foo"

    def test_array_type(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("[I") == "int[]"
        assert dalvik_type_to_java("[Ljava/lang/String;") == "String[]"

    def test_empty_returns_void(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("") == "void"


class TestJavaPrototypeConversion:
    """Tests for method signature to Java prototype conversion."""

    def test_simple_method(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        assert dalvik_to_java_prototype("foo", "()V") == "void foo()"

    def test_method_with_params(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("bar", "(ILjava/lang/String;)Z")
        assert result == "boolean bar(int, String)"

    def test_method_returning_object(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("create", "()Lcom/example/Foo;")
        assert result == "Foo create()"

    def test_empty_signature(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("m", "")
        assert "m()" in result


class TestDalvikParamParsing:
    """Tests for parsing Dalvik parameter descriptors."""

    def test_empty(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("") == []

    def test_single_primitive(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("I") == ["I"]

    def test_multiple_primitives(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("IZJ") == ["I", "Z", "J"]

    def test_single_object(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("Ljava/lang/String;") == ["Ljava/lang/String;"]

    def test_mixed(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("ILjava/lang/String;Z")
        assert result == ["I", "Ljava/lang/String;", "Z"]

    def test_arrays(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("[I[Ljava/lang/String;")
        assert result == ["[I", "[Ljava/lang/String;"]

    def test_two_objects(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("Landroid/os/Bundle;Ljava/lang/String;")
        assert len(result) == 2