K. C. Ho

241 papers B 5C 5Misc 29Journal 162Unranked 40
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Commun.
Mohannad H. Al-Ali, Muthana Al-Amidie, Ahmed Al-Asadi, K. C. Ho
2026 J jnl
IEEE Trans. Commun.
Qinman Lin, Gang Wang, K. C. Ho, Lei Huang
2026 J jnl
Signal Process.
Jian Pei, Gang Wang, K. C. Ho, Lei Huang
2026 J jnl
IEEE Trans. Wirel. Commun.
Yue Hu, Gang Wang, K. C. Ho
2026 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Hongzhi Wen, Gang Wang, K. C. Ho
2026 J jnl
IEEE Wirel. Commun. Lett.
Haoran Zhang, Gang Wang, K. C. Ho
2026 J jnl
IEEE Trans. Wirel. Commun.
Jiajun He, K. C. Ho, Hien Quoc Ngo, Chao Wang, Han Yu, Hing Cheung So, Hyundong Shin, Michail Matthaiou
2026 J jnl
IEEE Trans. Wirel. Commun.
Danyan Lin, Gang Wang, K. C. Ho
2026 J jnl
IEEE Trans. Wirel. Commun.
Xiaochuan Ke, K. C. Ho
2025 J jnl
IEEE Signal Process. Mag.
Danyan Lin, Gang Wang, K. C. Ho, Xin Liao
2025 J jnl
IEEE Trans. Signal Process.
Xiaochuan Ke, K. C. Ho
2025 J jnl
IEEE Trans. Signal Process.
Xiaochuan Ke, K. C. Ho
2025 J jnl
IEEE Trans. Commun.
Dandan Pang, Gang Wang, K. C. Ho
2025 J jnl
IEEE Trans. Signal Process.
Danyan Lin, Gang Wang, K. C. Ho, Lei Huang
2025 J jnl
IEEE Trans. Signal Process.
Haoran Zhang, Gang Wang, K. C. Ho
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Chengjie Zhang, Xinyang Han, He Kong, K. C. Ho
2025 J jnl
IEEE Internet Things Mag.
Sheng Xu, Linlong Wu, Kutluyil Dogançay, M. R. Bhavani Shankar, K. C. Ho, Xinyu Wu
2025 J jnl
IEEE Internet Things J.
Tianye Chen, Gang Wang, K. C. Ho, Lei Huang
2025 conf
IEEECONF
Zhongna Zhou, K. C. Ho, Zhao Sun, Trevor Tran
2025 J jnl
IEEE Trans. Signal Process.
Tianyi Jia, Xiaochuan Ke, Hongwei Liu, K. C. Ho, Hongtao Su
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Xianliang Li, Sheng Xu, K. C. Ho
2025 J jnl
IEEE Internet Things J.
Guanxu Chen, Gang Wang, K. C. Ho, Lei Huang
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Qian Qin, Gang Wang, K. C. Ho
2024 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Gholamreza Bagherian, Nader Mokari, Bijan Abbasi Arand, K. C. Ho, Halim Yanikomeroglu
2024 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Zhiwei Yang, Jibin Zheng, Yang Yang, Tiancang Zhang, Juan Yang, Hongwei Liu, K. C. Ho, Qi Gao
2024 J jnl
IEEE Trans. Wirel. Commun.
Sipu Zhou, Gang Wang, K. C. Ho
2024 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Gang Wang, Shuli Yang, Jian Pei, K. C. Ho
2024 J jnl
Signal Process.
Zhenguo Jiang, Gang Wang, K. C. Ho, Yimao Sun
2024 J jnl
IEEE Trans. Signal Process.
Xiaochuan Ke, K. C. Ho
2024 J jnl
IEEE Trans. Signal Process.
Xiaochuan Ke, K. C. Ho
2024 conf
MWSCAS
Ziao Chen, K. C. Ho, Satish S. Nair
2024 Misc conf
ICASSP
Beichuan Tang, Yimao Sun, K. C. Ho, Lei Zhang, Yanbing Yang
2024 J jnl
IEEE Trans. Wirel. Commun.
Gang Wang, Zhenguo Jiang, K. C. Ho
2024 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Yang Yang, Jibin Zheng, Hongwei Liu, K. C. Ho, Zhiwei Yang, Sizhe Gao
2024 J jnl
IEEE Trans. Signal Process.
Yimao Sun, K. C. Ho, Tianyi Xing, Yanbing Yang, Liangyin Chen
2024 J jnl
IEEE Trans. Wirel. Commun.
Xiaomeng Dong, Gang Wang, K. C. Ho, Lei Huang
2024 J jnl
IEEE Trans. Commun.
Gang Wang, Yudong Xiao, K. C. Ho, Lei Huang
2023 J jnl
IEEE Signal Process. Lett.
Yimao Sun, K. C. Ho, Yanbing Yang, Liangyin Chen
2023 J jnl
IEEE Trans. Wirel. Commun.
Gang Wang, Peng Xiang, K. C. Ho
2023 Misc conf
ICASSP
Jian Pei, Gang Wang, K. C. Ho, Lei Huang
2023 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Yudong Xiao, Gang Wang, K. C. Ho
2023 J jnl
IEEE Trans. Mob. Comput.
Gang Wang, Ruichao Zheng, K. C. Ho
2023 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Trung-Kien Le
2023 J jnl
IEEE Trans. Signal Process.
Yang Zhang, K. C. Ho
2023 J jnl
IEEE Trans. Wirel. Commun.
Tianyi Jia, Hongwei Liu, K. C. Ho, Haiyan Wang
2023 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Wenjun Wu, Gang Wang, K. C. Ho
2023 J jnl
IEEE Trans. Inf. Theory
Mohannad H. Al-Ali, K. C. Ho
2023 J jnl
IEEE Trans. Image Process.
Wei Wang, Gang Wang, Chenlong Hu, K. C. Ho
2023 Misc conf
ICASSP
Yimao Sun, K. C. Ho, Yanbing Yang, Lei Zhang, Liangyin Chen
2023 J jnl
Signal Process.
Wei Wang, Gang Wang, K. C. Ho, Lei Huang
2023 J jnl
Signal Process.
Yuwei Wang, K. C. Ho, Zhi Wang
2023 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Danyan Lin, Gang Wang, K. C. Ho
2022 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Musaab M. Ahmed, K. C. Ho, Gang Wang
2022 J jnl
IEEE Internet Things J.
Yimao Sun, K. C. Ho, Gang Wang, Hongyang Chen, Yanbing Yang, Liangyin Chen, Qun Wan
2022 J jnl
Signal Process.
Yimao Sun, K. C. Ho, Yanbing Yang, Lei Zhang, Liangyin Chen
2022 J jnl
Signal Process.
Mohannad H. Al-Ali, K. C. Ho
2022 conf
SAM
Yudong Xiao, Gang Wang, K. C. Ho
2022 J jnl
IEEE Trans. Signal Process.
K. C. Ho
2022 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Tianyi Jia, Haiyan Wang, Gang Wang, K. C. Ho
2022 J jnl
IEEE Trans. Signal Process.
Yang Zhang, K. C. Ho
2022 J jnl
Signal Process.
Yang Yang, Jibin Zheng, Hongwei Liu, K. C. Ho, YangQuan Chen, Zhiwei Yang
2022 J jnl
CoRR
Wei Wang, Gang Wang, Chenlong Hu, K. C. Ho
2022 Misc conf
ICASSP
Ruichao Zheng, Gang Wang, K. C. Ho, Lei Huang
2022 J jnl
IEEE Trans. Signal Process.
Yimao Sun, K. C. Ho, Lin Gao, Jifeng Zou, Yanbing Yang, Liangyin Chen
2021 J jnl
IEEE Trans. Wirel. Commun.
Ruichao Zheng, Gang Wang, K. C. Ho
2021 J jnl
IEEE Trans. Signal Process.
Gang Wang, K. C. Ho, Xianjing Chen
2021 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Yang Zhang, K. C. Ho
2021 J jnl
Signal Process.
Shuli Yang, Gang Wang, K. C. Ho
2021 J jnl
IEEE J. Biomed. Health Informatics
Changzhe Jiao, Chao Chen, Shuiping Gou, Dong Hai, Bo Yu Su, Marjorie Skubic, Licheng Jiao, Alina Zare, K. C. Ho
2021 J jnl
IEEE Trans. Image Process.
Chenlong Hu, Gang Wang, K. C. Ho, Junli Liang
2021 J jnl
IEEE Signal Process. Lett.
Yue Wang, K. C. Ho, Lei Huang
2021 J jnl
Signal Process.
Xianjing Chen, Gang Wang, K. C. Ho
2020 Misc conf
ICASSP
Tianyi Jia, K. C. Ho, Haiyan Wang, Xiaohong Shen
2020 Misc conf
ICASSP
Gang Wang, K. C. Ho
2020 J jnl
IEEE Trans. Signal Process.
Trung-Kien Le, K. C. Ho
2020 J jnl
IEEE Trans. Signal Process.
Yue Wang, Gang Wang, Shanjie Chen, K. C. Ho, Lei Huang
2020 J jnl
Signal Process.
Sanaa S. A. Al-Samahi, Yang Zhang, K. C. Ho
2020 J jnl
IEEE Trans. Signal Process.
Yimao Sun, K. C. Ho, Qun Wan
2020 J jnl
Signal Process.
Sanaa S. A. Al-Samahi, Yang Zhang, K. C. Ho
2020 J jnl
IEEE Trans. Signal Process.
Trung-Kien Le, K. C. Ho
2020 J jnl
IEEE Trans. Signal Process.
Tianyi Jia, K. C. Ho, Haiyan Wang, Xiaohong Shen
2020 J jnl
IEEE Trans. Signal Process.
Musaab M. Ahmed, K. C. Ho, Gang Wang
2020 J jnl
IEEE Trans. Signal Process.
Yang Zhang, K. C. Ho
2020 Misc conf
ICASSP
Mohannad H. Al-Ali, K. C. Ho
2019 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jordan M. Malof, Daniël Reichman, Andrew Karem, Hichem Frigui, K. C. Ho, Joseph N. Wilson, Wen-Hsiung Lee, William Cummings, Leslie M. Collins
2019 Misc conf
ICASSP
Yimao Sun, K. C. Ho, Qun Wan
2019 conf
EUSIPCO
Swapnil R. Joshi, Drew B. Headley, K. C. Ho, Denis Paré, Satish S. Nair
2019 J jnl
IEEE Trans. Wirel. Commun.
Gang Wang, K. C. Ho
2019 J jnl
IEEE Trans. Signal Process.
Tianyi Jia, K. C. Ho, Haiyan Wang, Xiaohong Shen
2019 conf
INFOCOM Workshops
Sanaa S. A. Al-Samahi, K. C. Ho, Naz E. Islam
2019 J jnl
IEEE Trans. Biomed. Eng.
Bo Yu Su, Moein Enayati, K. C. Ho, Marjorie Skubic, Laurel Despins, James Keller, Mihail Popescu, Giovanna Guidoboni, Marilyn Rantz
2019 J jnl
IEEE Trans. Signal Process.
Yang Zhang, K. C. Ho
2019 J jnl
IEEE Trans. Wirel. Commun.
Benjian Hao, K. C. Ho, Zan Li
2019 conf
EUSIPCO
Sanaa S. A. Al-Samahi, K. C. Ho, Naz E. Islam
2019 J jnl
IEEE Trans. Wirel. Commun.
Jian Jiang, Gang Wang, K. C. Ho
2019 J jnl
IEEE Trans. Signal Process.
Yimao Sun, K. C. Ho, Qun Wan
2019 J jnl
IEEE Trans. Signal Process.
Trung-Kien Le, K. C. Ho
2018 Misc conf
ICASSP
Yue Wang, K. C. Ho, Gang Wang
2018 J jnl
IEEE Signal Process. Lett.
Jian Jiang, Gang Wang, K. C. Ho
2018 conf
EUSIPCO
Xi Li, Fucheng Guo, Le Yang, K. C. Ho
2018 conf
DSP
Sanaa S. A. Al-Samahi, K. C. Ho, Naz E. Islam
2018 J jnl
IEEE Trans. Biomed. Eng.
Changzhe Jiao, Bo Yu Su, Princess Lyons, Alina Zare, K. C. Ho, Marjorie Skubic
2018 conf
DSP
Shanjie Chen, K. C. Ho
2018 J jnl
J. Ambient Intell. Smart Environ.
Bo Yu Su, K. C. Ho, Marilyn Rantz, Marjorie Skubic
2018 J jnl
IEEE Trans. Signal Process.
Trung-Kien Le, K. C. Ho, Trung-Hieu Le
2017 J jnl
IEEE Wirel. Commun. Lett.
Liyang Rui, K. C. Ho
2017 Misc conf
ICASSP
Mohannad H. Al-Ali, K. C. Ho
2017 J jnl
J. Ambient Intell. Smart Environ.
Liyang Rui, Shanjie Chen, K. C. Ho, Marilyn Rantz, Marjorie Skubic
2017 J jnl
J. Ambient Intell. Smart Environ.
Licet Rosales, Bo Yu Su, Marjorie Skubic, K. C. Ho
2017 Misc conf
ICASSP
Liu Yang, Le Yang, K. C. Ho
2017 J jnl
J. Math. Imaging Vis.
Ali Al-Sharadqah, K. C. Ho
2017 J jnl
IEEE Trans. Signal Process.
Yue Wang, K. C. Ho
2016 J jnl
IEEE Signal Process. Lett.
Jihao Yin, Qun Wan, Shiwen Yang, K. C. Ho
2016 J jnl
IEEE Trans. Wirel. Commun.
Sasa Li, K. C. Ho
2016 conf
EUSIPCO
Shanjie Chen, K. C. Ho
2016 J jnl
IEEE Signal Process. Lett.
Liu Yang, Le Yang, K. C. Ho
2016 Misc conf
ICASSP
Mohannad H. Al-Ali, K. C. Ho
2016 conf
EMBC
Marjorie Skubic, Bradford H. Harris, Erik E. Stone, K. C. Ho, Bo Yu Su, Marilyn Rantz
2016 J jnl
IEEE Trans. Wirel. Commun.
Mohannad H. Al-Ali, K. C. Ho
2015 J jnl
IEEE Trans. Signal Process.
Shanjie Chen, K. C. Ho
2015 J jnl
IEEE Trans. Wirel. Commun.
Yue Wang, K. C. Ho
2015 Misc conf
ICASSP
Liyang Rui, Shanjie Chen, K. C. Ho
2015 J jnl
IEEE Trans. Biomed. Eng.
Bo Yu Su, K. C. Ho, Marilyn Rantz, Marjorie Skubic
2015 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Liyang Rui, K. C. Ho
2015 conf
EMBC
Katy Lydon, Bo Yu Su, Licet Rosales, Moein Enayati, K. C. Ho, Marilyn Rantz, Marjorie Skubic
2014 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Daniel Pak-Kong Lun, Tak-Wai Shen, K. C. Ho
2014 J jnl
IEEE Trans. Wirel. Commun.
Zhenhua Ma, K. C. Ho
2014 conf
EMBC
Yun Li, K. C. Ho, Mihail Popescu, Marjorie Skubic
2014 J jnl
IEEE Trans. Wirel. Commun.
Liyang Rui, K. C. Ho
2014 J jnl
Digit. Signal Process.
Zhenhua Ma, K. C. Ho
2014 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Liyang Rui, K. C. Ho
2014 J jnl
IEEE Trans. Biomed. Eng.
Yun Li, K. C. Ho, Mihail Popescu
2014 J jnl
IEEE Trans. Signal Process.
Liyang Rui, K. C. Ho
2014 J jnl
IEEE Signal Process. Mag.
Alina Zare, K. C. Ho
2014 conf
SAM
Jinzhou Li, K. C. Ho, Fucheng Guo, Wenli Jiang
2014 J jnl
Signal Process.
Ming Sun, K. C. Ho
2014 Misc conf
ICASSP
Shanjie Chen, K. C. Ho
2014 conf
DSP
Yanlin Wang, Yun Li, K. C. Ho, Alina Zare, Marjorie Skubic
2013 J jnl
Signal Process.
Lanxin Lin, Hing-Cheung So, Frankie K. W. Chan, Yiu Tong Chan, K. C. Ho
2013 J jnl
IEEE Trans. Signal Process.
Shanjie Chen, K. C. Ho
2013 Misc conf
ICASSP
Ming Sun, Zhenhua Ma, K. C. Ho
2013 conf
CCNC
Yue Wang, Liyang Rui, Wenjia Shi, K. C. Ho, Yi Shang
2013 J jnl
IEEE Signal Process. Mag.
Hing-Cheung So, Yiu Tong Chan, K. C. Ho, Yuan Chen
2013 J jnl
IEEE Trans. Signal Process.
Yue Wang, K. C. Ho
2012 J jnl
IEEE Trans. Biomed. Eng.
Yun Li, K. C. Ho, Mihail Popescu
2012 J jnl
Signal Process.
Ming Sun, Le Yang, K. C. Ho
2012 J jnl
Inf. Fusion
Hichem Frigui, Lijun Zhang, Paul D. Gader, Joseph N. Wilson, K. C. Ho, Andres Mendez-Vazquez
2012 J jnl
IEEE Trans. Signal Process.
K. C. Ho
2012 Misc conf
ICASSP
Liyang Rui, K. C. Ho
2012 conf
SAM
Liyang Rui, K. C. Ho
2012 C conf
ISCAS
Zhenhua Ma, Le Yang, K. C. Ho
2012 conf
EMBC
Liang Liu, Mihail Popescu, K. C. Ho, Marjorie Skubic, Marilyn Rantz
2012 conf
EMBC
Yun Li, Mihail Popescu, K. C. Ho
2012 conf
EMBC
Bo Yu Su, K. C. Ho, Marjorie Skubic, Licet Rosales
2012 J jnl
Signal Process.
Ming Sun, K. C. Ho
2011 Misc conf
ICASSP
Fucheng Quo, K. C. Ho
2011 J jnl
IEEE Trans. Signal Process.
Ming Sun, K. C. Ho
2011 conf
EMBC
Yun Li, Mihail Popescu, K. C. Ho, Daniel P. Nabelek
2011 Misc conf
ICASSP
Zhenhua Ma, K. C. Ho
2010 C conf
IGARSS
Taylor C. Glenn, Joseph N. Wilson, K. C. Ho
2010 J jnl
IEEE Trans. Signal Process.
Le Yang, K. C. Ho
2010 Misc conf
ICASSP
Le Yang, K. C. Ho
2009 J jnl
IEEE Trans. Signal Process.
Le Yang, K. C. Ho
2009 Misc conf
ICASSP
Zhenhua Ma, K. C. Ho, Le Yang
2009 J jnl
IEEE Trans. Signal Process.
Ming Sun, K. C. Ho
2008 J jnl
IEEE Trans. Geosci. Remote. Sens.
K. C. Ho, Lawrence Carin, Paul D. Gader, Joseph N. Wilson
2008 B conf
IJCNN
Chiman Kwan, J. Yin, Bulent Ayhan, S. Chu, X. Liu, K. Puckett, Y. Zhao, K. C. Ho, Martin Kruger, Irma Sityar
2008 J jnl
IEEE Trans. Signal Process.
Le Yang, Ming Sun, K. C. Ho
2008 Misc conf
ICASSP
Ming Sun, K. C. Ho
2008 J jnl
Signal Process.
Thomas C. T. Chan, Hing-Cheung So, K. C. Ho
2008 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Yiu Tong Chan
2008 J jnl
J. Signal Process. Syst.
Zhiguo Zhang, Shing-Chow Chan, Ka-Leung Ho, K. C. Ho
2008 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Le Yang
2008 B conf
FUZZ-IEEE
K. C. Ho, Joseph N. Wilson, Paul D. Gader
2008 J jnl
IEEE Trans. Geosci. Remote. Sens.
William Ng, Thomas C. T. Chan, Hing-Cheung So, K. C. Ho
2008 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Ming Sun
2008 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Luis M. Vicente
2008 B conf
IJCNN
Chiman Kwan, J. Yin, Bulent Ayhan, S. Chu, X. Liu, K. Puckett, Y. Zhao, K. C. Ho, Martin Kruger, Irma Sityar
2007 J jnl
IEEE Trans. Geosci. Remote. Sens.
Joseph N. Wilson, Paul D. Gader, Wen-Hsiung Lee, Hichem Frigui, K. C. Ho
2007 conf
EUSIPCO
Thomas C. T. Chan, Hing Cheung So, K. C. Ho
2007 J jnl
IEEE Trans. Wirel. Commun.
K. C. Ho, Xiaoning Lu, Vandana Mehta
2007 J jnl
IEEE Trans. Speech Audio Process.
K. C. Ho, Ming Sun
2007 conf
EUSIPCO
Luis M. Vicente, K. C. Ho
2007 C conf
ISCAS
Chun-Yat Ma, Tai-Chiu Hsung, Daniel Pak-Kong Lun, K. C. Ho, Hon Keung Kwan
2007 J jnl
IEEE Trans. Signal Process.
Tai-Chiu Hsung, Daniel Pak-Kong Lun, Yu-Hing Shum, K. C. Ho
2007 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Xiaoning Lu, La-or Kovavisaruch
2007 J jnl
Signal Process.
Hing-Cheung So, Yiu Tong Chan, K. C. Ho, Frankie K. W. Chan
2006 J jnl
IEEE Trans. Signal Process.
Yunhong Li, K. C. Ho, Chiman Kwan
2006 J jnl
EURASIP J. Adv. Signal Process.
Chiman Kwan, K. C. Ho, Gang Mei, Yunhong Li, Zhubing Ren, Roger Xu, Y. Zhang, Debang Lao, M. Stevenson, Vincent Stanford, Cedrick Rochet
2006 conf
ICASSP (4)
Luis M. Vicente, K. C. Ho, Chiman Kwan
2006 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Yiu Tong Chan
2006 conf
ICASSP (4)
Xiaoning Lu, K. C. Ho
2006 J jnl
IEEE Signal Process. Lett.
Tai-Chiu Hsung, Daniel Pak-Kong Lun, K. C. Ho
2006 C conf
ISCAS
Xiaoning Lu, K. C. Ho
2005 conf
ICASSP (4)
La-or Kovavisaruch, K. C. Ho
2005 J jnl
IEEE Trans. Wirel. Commun.
Shannon D. Blunt, K. C. Ho
2005 conf
ISCAS (4)
Yunhong Li, K. C. Ho, Chiman Kwan, Yee Hong Leung
2005 J jnl
IEEE Trans. Signal Process.
Yiu-Tong Chan, K. C. Ho
2005 J jnl
IEEE Trans. Signal Process.
Hing-Cheung So, Kit Wing Chan, Yiu Tong Chan, K. C. Ho
2005 conf
ICASSP (3)
Xiaoning Lu, K. C. Ho
2005 J jnl
IEEE Trans. Signal Process.
Tai-Chiu Hsung, Daniel Pak-Kong Lun, K. C. Ho
2005 J jnl
EURASIP J. Adv. Signal Process.
Hichem Frigui, K. C. Ho, Paul D. Gader
2004 conf
ICASSP (2)
Yunhong Li, K. C. Ho, Chiman Kwan
2004 conf
ICASSP (5)
Chiman Kwan, Gang Mei, George Zhao, Zhubing Ren, Roger Xu, Vincent Stanford, Cedrick Rochet, Julian Aube, K. C. Ho
2004 C conf
IGARSS
K. C. Ho, Paul D. Gader, Joseph N. Wilson
2004 conf
ICASSP (4)
Shannon D. Blunt, K. C. Ho
2004 conf
EUSIPCO
Hing-Cheung So, Yiu Tong Chan, K. C. Ho, Kit Wing Chan
2003 conf
ISCAS (4)
Liang Hong, K. C. Ho
2003 conf
ICASSP (5)
Yunhong Li, K. C. Ho, Chiman Kwan
2003 conf
ISCAS (4)
K. C. Ho, Wenwei Xu
2003 conf
ICASSP (5)
Yiu Tong Chan, K. C. Ho
2002 J jnl
IEEE Trans. Geosci. Remote. Sens.
K. C. Ho, Paul D. Gader
2002 Misc conf
ICASSP
Shannon D. Blunt, K. C. Ho
2002 J jnl
Inf. Fusion
Ronald Joe Stanley, Paul D. Gader, K. C. Ho
2001 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Yiu Tong Chan
2001 J jnl
IEEE Trans. Signal Process.
K. C. Ho
2000 Misc conf
ICASSP
K. C. Ho, Qing-Guang Liu, R. Rabipour, P. Yatrou
2000 J jnl
IEEE Trans. Signal Process.
K. C. Ho
2000 B conf
WCNC
K. C. Ho, S. Tutsanasuwan, C. H. Davis
2000 B conf
WCNC
Liang Hong, K. C. Ho
2000 Misc conf
ICASSP
Shannon D. Blunt, K. C. Ho
1999 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Yiu Tong Chan
1999 Misc conf
ICASSP
Yiu Tong Chan, K. C. Ho
1999 conf
ISCAS (4)
K. C. Ho, Haiqin Liu, Liang Hong
1998 J jnl
IEEE Trans. Signal Process.
K. C. Ho
1998 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Yiu Tong Chan
1996 J jnl
IEEE Trans. Signal Process.
K. C. Ho
1996 Misc conf
ICASSP
K. C. Ho, Yiu Tong Chan, M. O. Johnson
1996 J jnl
IEEE Trans. Signal Process.
Yiu Tong Chan, K. C. Ho
1995 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Yiu Tong Chan
1995 Misc conf
ICASSP
K. C. Ho, A. E. Scheidl, Robert J. Inkol
1995 J jnl
Signal Process.
K. C. Ho, Pak-Chung Ching
1994 J jnl
IEEE Trans. Signal Process.
Yiu Tong Chan, K. C. Ho
1994 conf
ICASSP (2)
Yiu Tong Chan, K. C. Ho
1994 conf
ICASSP (2)
George Henry Niezgoda, K. C. Ho
1993 conf
ICASSP (1)
Hing-Cheung So, P. C. Ching, K. C. Ho, Yiu Tong Chan
1993 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Yiu Tong Chan, P. C. Ching
1992 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Pak-Chung Ching, Yiu Tong Chan
1992 J jnl
IEEE Trans. Signal Process.
K. C. Ho, Pak-Chung Ching
1991 Misc conf
ICASSP
K. C. Ho, P. C. Ching, Yiu Tong Chan
1990 Misc conf
ICASSP
K. C. Ho, P. C. Ching, Yiu Tong Chan
redb/extractors/decompiler/apk/method_extractor.py
← Index redb/extractors/decompiler/apk/method_extractor.py python
"""Per-method content extraction, hashing, and similarity computation.

Handles SHA-256 content hashing, ssdeep/TLSH fuzzy hashing, MinHash
computation, and obfuscation indicator detection for APK methods.
"""

import hashlib
import re
from typing import Dict, List, Optional

from redb.extractors.decompiler.apk.smali_normalization import (
    categorize_opcode,
    normalize_method_body,
)
from redb.extractors.decompiler.apk.smali_parser import SmaliParser


# ---------------------------------------------------------------------------
# Smali Prime Product — semantic primes matching Binary Ninja's LLIL primes
# ---------------------------------------------------------------------------
# Each Dalvik semantic category maps to the same prime its LLIL counterpart
# uses in cfg_features.py. This makes prime products semantically comparable
# for APK-vs-APK similarity (not numerically comparable to Binja values).

SMALI_OP_PRIMES = {
    "ALU": 37,       # ADD/SUB → same prime as LLIL_ADD
    "CONV": 131,     # Type conversions → same as LLIL_SX
    "CMP": 103,      # Comparisons → same as LLIL_CMP_E
    "MOV": 2,        # Register moves → same as LLIL_SET_REG
    "CONST": 2,      # Constants → SET_REG equivalent
    "LOAD": 5,       # Field/array reads → same as LLIL_LOAD
    "STORE": 7,      # Field/array writes → same as LLIL_STORE
    "CALL": 17,      # invoke-* → same as LLIL_CALL
    "BRANCH": 29,    # if-* → same as LLIL_IF
    "JMP": 31,       # goto → same as LLIL_GOTO
    "SWITCH": 151,   # switch → same as LLIL_JUMP_TO
    "RET": 23,       # return → same as LLIL_RET
    "ALLOC": 5,      # new-instance/new-array → LOAD-adjacent (heap access)
    "TYPE": 1,       # check-cast/instance-of → identity (metadata)
    "ARR": 5,        # array-length/fill-array → LOAD-adjacent
    "EXC": 23,       # throw → RET-adjacent (control transfer out)
    "SYNC": 1,       # monitor → identity (no LLIL equivalent)
    "OTHER": 1,      # Unknown → identity
}


def compute_prime_product_smali(smali_body: str) -> int:
    """Multiplicative hash of normalized Dalvik opcodes. Mod 2^64.

    Same algorithm as cfg_features.compute_prime_product but using
    Dalvik semantic categories instead of LLIL operation enums.
    """
    if not smali_body:
        return 0

    product = 1
    for line in smali_body.splitlines():
        stripped = line.strip()
        if not stripped or stripped.startswith((".", ":", "#")):
            continue
        opcode = stripped.split()[0].split("/")[0] if stripped else ""
        category = categorize_opcode(opcode)
        prime = SMALI_OP_PRIMES.get(category, 1)
        product = (product * prime) % (2**64)

    return product


def count_call_instructions(smali_body: str) -> int:
    """Count invoke-* instructions in a smali method body."""
    if not smali_body:
        return 0
    count = 0
    for line in smali_body.splitlines():
        stripped = line.strip()
        if stripped.startswith("invoke-"):
            count += 1
    return count


def compute_sha256(content: str) -> str:
    """Compute SHA-256 hash of normalized content."""
    return hashlib.sha256(content.encode("utf-8")).hexdigest()


def compute_ssdeep(content: str) -> Optional[str]:
    """Compute ssdeep fuzzy hash of content."""
    try:
        import ppdeep
        data = content.encode("utf-8")
        if len(data) < 50:
            return None
        result = ppdeep.hash(data)
        return result if result else None
    except (ImportError, Exception):
        return None


def compute_tlsh(content: str) -> Optional[str]:
    """Compute TLSH fuzzy hash of content."""
    try:
        import tlsh
        data = content.encode("utf-8")
        if len(data) < 50:
            return None
        result = tlsh.hash(data)
        return result if result else None
    except (ImportError, Exception):
        return None


def compute_minhash(
    content: str,
    n: int = 3,
    normalization_level: str = "opcode_api",
) -> Optional[List[int]]:
    """Compute MinHash signature from semantically normalized smali n-grams.

    Applies semantic normalization (analogous to Binary Ninja's LLIL) before
    computing the MinHash. This strips register allocation noise and
    instruction encoding variants while preserving operation semantics and
    API references.

    Uses the same algorithm and parameters as the Binary Ninja MinHasher
    (64 seeds from master seed 0xdeadbeef, 8-bit signature elements, mmh3)
    to ensure cross-platform similarity comparisons are compatible.

    Args:
        content: Raw smali method body.
        n: N-gram size (default 3).
        normalization_level: Normalization level for instructions.
            'opcode_api' (default) preserves API call/field references.
            'category' uses only semantic categories.
            'opcode' uses base opcodes without operands.
    """
    try:
        import mmh3
    except ImportError:
        return None

    HASH_MAX = 0xFFFFFFFF
    SIGNATURE_LENGTH = 64
    SIGNATURE_BITS = 8

    # Semantically normalize instructions (like LLIL for native code)
    lines = normalize_method_body(content, level=normalization_level)

    if len(lines) < n:
        return None

    # Build n-grams (tuples of normalized instruction strings)
    shingles = [tuple(lines[i:i + n]) for i in range(len(lines) - n + 1)]

    if not shingles:
        return None

    # Generate deterministic seeds matching the Binary Ninja pipeline
    import random
    rng = random.Random(0xDEADBEEF)
    seeds = [rng.randint(0, HASH_MAX) for _ in range(SIGNATURE_LENGTH)]

    # For each seed, hash all shingles and take the minimum
    signature = []
    for seed in seeds:
        min_val = HASH_MAX
        for shingle in shingles:
            text = "|".join(str(elem) for elem in shingle)
            h = mmh3.hash(text, seed) & HASH_MAX
            if h < min_val:
                min_val = h
        # Truncate to signature bits
        if SIGNATURE_BITS < 32:
            min_val %= (2 ** SIGNATURE_BITS)
        signature.append(min_val)

    return signature


def detect_obfuscation_indicators(
    method_name: str,
    class_name: str,
    smali_body: str,
    instruction_count: int,
) -> Dict[str, bool]:
    """Compute obfuscation indicators for a method.

    Returns dict with boolean indicators.
    """
    indicators = {}

    # Short method name (typical R8/ProGuard output)
    indicators["short_method_name"] = len(method_name) <= 2

    # Short class name — extract simple name from Dalvik descriptor
    simple_class = class_name
    if "/" in simple_class:
        simple_class = simple_class.rsplit("/", 1)[-1]
    simple_class = simple_class.rstrip(";")
    indicators["short_class_name"] = len(simple_class) <= 2

    # String encryption: const-string followed by decryption-pattern call
    indicators["has_string_encryption"] = _detect_string_encryption(smali_body)

    # Reflection calls
    indicators["has_reflection_calls"] = _detect_reflection_calls(smali_body)

    # Excessive goto count (control flow flattening)
    goto_count = _count_goto_instructions(smali_body)
    threshold = max(5, int(instruction_count * 0.15))
    indicators["excessive_goto_count"] = goto_count > threshold

    return indicators


def _detect_string_encryption(smali_body: str) -> bool:
    """Detect const-string followed by decryption-pattern calls."""
    lines = smali_body.split("\n")
    for i, line in enumerate(lines):
        stripped = line.strip()
        if stripped.startswith("const-string"):
            # Check the next 3 lines for invoke-* to potential decryption
            for j in range(i + 1, min(i + 4, len(lines))):
                next_line = lines[j].strip()
                if next_line.startswith("invoke-"):
                    # Common decryption patterns
                    if any(
                        pat in next_line
                        for pat in [
                            "decrypt",
                            "decode",
                            "Cipher",
                            "DES",
                            "AES",
                            "Base64",
                            "getBytes",
                        ]
                    ):
                        return True
    return False


def _detect_reflection_calls(smali_body: str) -> bool:
    """Detect use of Java reflection APIs."""
    reflection_patterns = [
        "Ljava/lang/reflect/",
        "Ljava/lang/Class;->forName",
        "Ljava/lang/Class;->getMethod",
        "Ljava/lang/Class;->getDeclaredMethod",
        "Ljava/lang/Class;->getField",
        "Ljava/lang/Class;->getDeclaredField",
    ]
    for pattern in reflection_patterns:
        if pattern in smali_body:
            return True
    return False


def _count_goto_instructions(smali_body: str) -> int:
    """Count goto/goto_16/goto_32 instructions."""
    count = 0
    for line in smali_body.split("\n"):
        stripped = line.strip()
        if stripped.startswith(("goto ", "goto/16 ", "goto/32 ")):
            count += 1
        elif stripped in ("goto", "goto/16", "goto/32"):
            count += 1
    return count


def dalvik_to_java_class(descriptor: str) -> str:
    """Convert Dalvik class descriptor to Java dot notation.

    Lcom/example/Foo; -> com.example.Foo
    """
    if descriptor.startswith("L") and descriptor.endswith(";"):
        return descriptor[1:-1].replace("/", ".")
    return descriptor.replace("/", ".")


def dalvik_type_to_java(type_desc: str) -> str:
    """Convert a Dalvik type descriptor to Java type name."""
    type_map = {
        "V": "void",
        "Z": "boolean",
        "B": "byte",
        "S": "short",
        "C": "char",
        "I": "int",
        "J": "long",
        "F": "float",
        "D": "double",
    }

    if not type_desc:
        return "void"

    if type_desc in type_map:
        return type_map[type_desc]

    if type_desc.startswith("["):
        return dalvik_type_to_java(type_desc[1:]) + "[]"

    if type_desc.startswith("L") and type_desc.endswith(";"):
        full = type_desc[1:-1].replace("/", ".")
        # Return simple name
        return full.rsplit(".", 1)[-1] if "." in full else full

    return type_desc


def dalvik_to_java_prototype(
    method_name: str, signature: str, class_name: str = ""
) -> str:
    """Convert Dalvik method signature to Java-style prototype.

    Input: method_name='onCreate', signature='(Landroid/os/Bundle;)V'
    Output: 'void onCreate(Bundle)'
    """
    # Parse return type and param types from signature
    if not signature or not signature.startswith("("):
        return f"void {method_name}()"

    close_paren = signature.find(")")
    if close_paren == -1:
        return f"void {method_name}()"

    params_str = signature[1:close_paren]
    return_type_str = signature[close_paren + 1:]

    return_type = dalvik_type_to_java(return_type_str)
    params = _parse_dalvik_params(params_str)
    param_java = ", ".join(dalvik_type_to_java(p) for p in params)

    return f"{return_type} {method_name}({param_java})"


def _parse_dalvik_params(params_str: str) -> List[str]:
    """Parse Dalvik parameter descriptor string into individual types."""
    params = []
    i = 0
    while i < len(params_str):
        ch = params_str[i]
        if ch in "VZBSCIJFD":
            params.append(ch)
            i += 1
        elif ch == "[":
            # Array — find the base type
            array_prefix = "["
            i += 1
            while i < len(params_str) and params_str[i] == "[":
                array_prefix += "["
                i += 1
            if i < len(params_str):
                if params_str[i] == "L":
                    end = params_str.find(";", i)
                    if end != -1:
                        params.append(array_prefix + params_str[i : end + 1])
                        i = end + 1
                    else:
                        break
                else:
                    params.append(array_prefix + params_str[i])
                    i += 1
        elif ch == "L":
            end = params_str.find(";", i)
            if end != -1:
                params.append(params_str[i : end + 1])
                i = end + 1
            else:
                break
        else:
            i += 1
    return params