Wanjiun Liao

229 papers A* 9A 6B 49C 8Journal 112Unranked 45
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Netw.
Tzuheng Huang, Shenghao Chiang, Peifan Liu, Wanjiun Liao
2025 J jnl
IEEE Trans. Mob. Comput.
Chi-Han Lee, De-Nian Yang, Guang-Siang Lee, Chih-Hang Wang, Wanjiun Liao
2025 J jnl
IEEE Trans. Mob. Comput.
Chiao-Wen Lin, De-Nian Yang, Wanjiun Liao
2025 J jnl
IEEE Trans. Veh. Technol.
Yiyao Huang, Wanjiun Liao
2025 J jnl
IEEE Netw.
Shao-Pao Wu, Wanjiun Liao
2024 J jnl
IEEE Trans. Wirel. Commun.
Chih-Yu Lin, Wanjiun Liao
2024 conf
VTC Spring
Chih-Yu Lin, Wanjiun Liao
2024 B conf
GLOBECOM
Chiao-Wen Lin, De-Nian Yang, Wanjiun Liao
2024 J jnl
IEEE/ACM Trans. Netw.
Sheng-Hao Chiang, Chih-Hang Wang, De-Nian Yang, Wanjiun Liao, Wen-Tsuen Chen
2024 J jnl
IEEE Trans. Serv. Comput.
Chih-Hang Wang, Yishuo Shi, De-Nian Yang, Chih-Yen Chen, Wanjiun Liao
2024 J jnl
IEEE Trans. Wirel. Commun.
Jia-Hong Chen, Wei-Che Kuo, Wanjiun Liao
2023 conf
ICCE-Taiwan
Chiao-Wen Lin, Yi-Zih Chen, Yong-Siang Wang, Yu-Hsiu Chou, Yu-Ching Yang, Nien-Chen Lin, Wanjiun Liao
2023 conf
MetaCom
Ching-Chieh Huang, Yi-Zih Chen, Wanjiun Liao
2023 J jnl
IEEE Internet Things Mag.
Jen-Sheng Tsai, Yau-Hwang Kuo, Wanjiun Liao
2023 J jnl
IEEE Trans. Parallel Distributed Syst.
Sheng-Hao Chiang, Chih-Hang Wang, De-Nian Yang, Wanjiun Liao, Wen-Tsuen Chen
2023 B conf
WCNC
Chu-To Mo, Jia-Hong Chen, Wanjiun Liao
2023 conf
ICC
Po-Hsun Lin, Wanjiun Liao
2022 J jnl
IEEE Internet Things Mag.
Ren Chen, Hao-wei Tseng, Jie-Lin Lien, Wanjiun Liao
2022 conf
ICC
Ta-Che Hsiao, De-Nian Yang, Wanjiun Liao
2022 J jnl
IEEE Trans. Mob. Comput.
Mengsi Yeh, Chih-Hang Wang, De-Nian Yang, Ji-Tang Lee, Wanjiun Liao
2022 J jnl
IEEE Commun. Stand. Mag.
Ling-Chih Kao, Wanjiun Liao
2022 J jnl
IEEE Trans. Serv. Comput.
Jen-Sheng Tsai, I-Hsun Chuang, Jie-Jyun Liu, Yau-Hwang Kuo, Wanjiun Liao
2022 conf
ICC
Keh-Yeun Liao, Chiao-Wen Lin, De-Nian Yang, Wanjiun Liao
2022 B conf
WCNC
Yi-Huai Hsu, Wanjiun Liao
2021 J jnl
IEEE Commun. Stand. Mag.
Ling-Chih Kao, Wanjiun Liao
2021 J jnl
IEEE Trans. Serv. Comput.
Hong-Yen Lo, Wanjiun Liao
2021 B conf
GLOBECOM
Chiao-Wen Lin, Chih-Hang Wang, De-Nian Yang, Wanjiun Liao
2021 J jnl
CoRR
Chiao-Wen Lin, Chih-Hang Wang, De-Nian Yang, Wanjiun Liao
2021 B conf
WCNC
Kai-Hsiang Liu, Yi-Huai Hsu, Wan-Ni Lin, Wanjiun Liao
2020 J jnl
IEEE Netw.
Ren Chen, I-Ping Tu, Kai-Er Chuang, Qin-Xue Lin, Shih-Wei Liao, Wanjiun Liao
2020 B conf
GLOBECOM
Yi-Han Chiang, Hai Lin, Yusheng Ji, Wanjiun Liao
2020 conf
ICC
Kai-Hsiang Liu, Wanjiun Liao
2020 conf
ICC
Chih-Yen Chen, Chih-Hang Wang, Sheng-Hao Chiang, De-Nian Yang, Wanjiun Liao
2020 conf
ICCE-TW
Yi-Huai Hsu, Jen-Hao Cheng, Keh-Yeun Liao, Yong-Siang Wang, Te-Hsin Chen, Hung-Yeh Chen, Chih-Kuan Yen, Wanjiun Liao
2020 B conf
WCNC
Jian-Jyun Hung, Wanjiun Liao, Yi-Han Chiang
2019 B conf
GLOBECOM
Yu-Xian Chen, Chih-Hang Wang, De-Nian Yang, Wanjiun Liao
2019 C conf
ICCC
Mengsi Yeh, Chih-Hang Wang, De-Nian Yang, Wanjiun Liao
2019 conf
ICC
Yan-Ting Chen, Wanjiun Liao
2019 J jnl
IEEE Trans. Netw. Sci. Eng.
Tsunghan Wu, Cheng-Shang Chang, Wanjiun Liao
2018 J jnl
IEEE Trans. Parallel Distributed Syst.
An-Dee Lin, Chung-Sheng Li, Wanjiun Liao, Hubertus Franke
2018 J jnl
IEEE Trans. Mob. Comput.
Ji-Tang Lee, De-Nian Yang, Yu-Chun Chen, Wanjiun Liao
2018 J jnl
IEEE Trans. Parallel Distributed Syst.
Linjiun Tsai, Hubertus Franke, Chung-Sheng Li, Wanjiun Liao
2018 J jnl
IEEE Trans. Wirel. Commun.
Chen-Yu Wei, Wanjiun Liao
2018 B conf
GLOBECOM
Yi-Han Chiang, Wanjiun Liao, Yusheng Ji
2018 J jnl
IEEE Trans. Cloud Comput.
Linjiun Tsai, Wanjiun Liao
2018 J jnl
IEEE Trans. Comput. Soc. Syst.
Yung-Yin Lo, Wanjiun Liao, Cheng-Shang Chang, Ying-Chin Lee
2017 J jnl
IEEE Trans. Veh. Technol.
Po-Han Huang, Hsu Kao, Wanjiun Liao
2017 J jnl
IEEE Trans. Veh. Technol.
Kun-Cheng Chung, Wen-Hsing Kuo, Wanjiun Liao
2017 J jnl
IEEE/ACM Trans. Netw.
Cheng-Shang Chang, Cheng-Yu Chen, Duan-Shin Lee, Wanjiun Liao
2017 J jnl
IEEE Trans. Mob. Comput.
Po-Han Huang, Shi-Sheng Sun, Wanjiun Liao
2017 B conf
GLOBECOM
Yi-Han Chiang, Wanjiun Liao
2017 conf
ICC
Bo-Syuan Huang, Yi-Han Chiang, Wanjiun Liao
2017 J jnl
IEEE Trans. Veh. Technol.
Yean-Fu Wen, Wanjiun Liao
2017 J jnl
IEEE Trans. Mob. Comput.
Yi-Hsuan Chiang, Wanjiun Liao
2016 J jnl
IEEE Trans. Netw. Sci. Eng.
Cheng-Shang Chang, Wanjiun Liao, Yu-Sheng Chen, Li-Heng Liou
2016 conf
ICC
Hsu Kao, Chen-Yu Wei, Hsiao-Ching Lin, Yi-Han Chiang, Wanjiun Liao
2016 A* conf
INFOCOM
Yi-Han Chiang, Wanjiun Liao
2016 B conf
GLOBECOM
Ji-Tang Lee, De-Nian Yang, Wanjiun Liao
2016 B conf
GLOBECOM
Chi-Heng Lin, De-Nian Yang, Ji-Tang Lee, Wanjiun Liao
2016 J jnl
IEEE Trans. Wirel. Commun.
Yi-Han Chiang, Wanjiun Liao
2016 conf
ICC
Po-Han Huang, Hsu Kao, Wanjiun Liao
2016 J jnl
IEEE Wirel. Commun.
Yi-Hsuan Chiang, Wanjiun Liao
2016 J jnl
IEEE Syst. J.
Li Ming Chen, Shun-Wen Hsiao, Meng Chang Chen, Wanjiun Liao
2016 J jnl
IEEE/ACM Trans. Netw.
Cheng-Shang Chang, Wanjiun Liao, Tsung Ying Wu
2016 J jnl
IEEE Netw.
An-Dee Lin, Hubertus Franke, Chung-Sheng Li, Wanjiun Liao
2015 J jnl
CoRR
Cheng-Shang Chang, Wanjiun Liao, Yu-Sheng Chen, Li-Heng Liou
2015 J jnl
IEEE Trans. Mob. Comput.
Ting-Yu Ho, De-Nian Yang, Wanjiun Liao
2015 J jnl
CoRR
Chi-Heng Lin, De-Nian Yang, Ji-Tang Lee, Wanjiun Liao
2015 J jnl
Math. Oper. Res.
Cheng-Shang Chang, Wanjiun Liao, Ching-Min Lien
2015 J jnl
CoRR
Yung-Yin Lo, Wanjiun Liao, Cheng-Shang Chang
2014 A* conf
INFOCOM
Tsung Ying Wu, Wanjiun Liao, Cheng-Shang Chang
2014 conf
ICC
Chen-Yi Chang, Kun-Lin Ho, Wanjiun Liao, Da-Shan Shiu
2014 B conf
GLOBECOM
Po-Han Chiang, Po-Han Huang, Shi-Sheng Sun, Wanjiun Liao, Wen-Tsuen Chen
2014 J jnl
IEEE Trans. Mob. Comput.
Chen-Yi Chang, Wanjiun Liao, Hung-Yun Hsieh, Da-Shan Shiu
2014 B conf
GLOBECOM
Yi-Han Chiang, Wanjiun Liao
2014 conf
IEEE BigData
Tsunghan Wu, Sheau-Harn Yu, Wanjiun Liao, Cheng-Shang Chang
2014 B conf
WCNC
Shi-Sheng Sun, Wanjiun Liao, Wen-Tsuen Chen
2013 B conf
PIMRC
Tsung Ying Wu, Kuo-Wei Lin, Po-Han Huang, Wanjiun Liao
2013 J jnl
Comput. Commun.
Li Ming Chen, Meng Chang Chen, Wanjiun Liao, Yeali S. Sun
2013 J jnl
Computer
Jianwei Niu, Jing Peng, Lei Shu, Chao Tong, Wanjiun Liao
2013 J jnl
IEEE J. Sel. Areas Commun.
Hsiao-Chen Lu, Wanjiun Liao, Meng Chang Chen, Musaed A. Alhussein
2013 J jnl
IEEE Trans. Commun.
Sheng-Chieh Wang, Wanjiun Liao
2013 conf
ICC
Yi-Han Chiang, Wanjiun Liao
2013 J jnl
IEEE Commun. Mag.
Chung-Sheng Li, Wanjiun Liao
2013 conf
ICC
Li Ming Chen, Meng Chang Chen, Yeali S. Sun, Wanjiun Liao
2013 B conf
GLOBECOM
Tsung Ying Wu, Wanjiun Liao
2012 J jnl
IEEE Trans. Commun.
Tsung-Jung Wu, Wanjiun Liao, Chung-Ju Chang
2012 conf
ICC
Kun-Cheng Chung, Yi-Chun Chou, Wanjiun Liao
2012 J jnl
IEEE J. Sel. Areas Commun.
Hsiao-Chen Lu, Wanjiun Liao
2012 A* conf
INFOCOM
Hsiao-Chen Lu, Wanjiun Liao
2012 conf
CloudNet
Linjiun Tsai, Wanjiun Liao
2012 C conf
IPCCC
Jianwei Niu, Jing Peng, Chao Tong, Wanjiun Liao
2012 J jnl
IEEE Wirel. Commun.
Jin-Jia Chang, Yi-Hua Li, Wanjiun Liao, Ing-Chau Chang
2012 B conf
GLOBECOM
Chen-Yi Chang, Wanjiun Liao, Da-Shan Shiu
2011 J jnl
IEEE J. Sel. Areas Commun.
Yen-Cheng Lai, Phone Lin, Wanjiun Liao, Chung-Min Chen
2011 J jnl
IEEE Trans. Multim.
Wen-Hsing Kuo, Wanjiun Liao, Tehuang Liu
2011 B conf
GLOBECOM
Sheng-Chieh Wang, Wanjiun Liao
2011 B conf
GLOBECOM
Kun-Cheng Chung, Hsin-Chun Chen, Wanjiun Liao
2011 J jnl
IEEE Trans. Wirel. Commun.
Chao-Fang Shih, Wanjiun Liao, Hsi-Lu Chao
2011 J jnl
Wirel. Networks
Yean-Fu Wen, Wanjiun Liao
2011 conf
ICC
Chih-Hsiang Tang, Hsiao-Chen Lu, Wanjiun Liao
2011 J jnl
IEEE Trans. Veh. Technol.
Jin-Jia Chang, Wanjiun Liao, Jiunn Ru Lai
2011 A* conf
INFOCOM
Hsiao-Chen Lu, Wanjiun Liao
2011 J jnl
IEEE Trans. Commun.
Hsiao-Chen Lu, Wanjiun Liao, Frank Yeong-Sung Lin
2011 conf
ICC
Shi-Sheng Sun, Yi-Chun Chen, Wanjiun Liao
2011 J jnl
IEEE Commun. Mag.
Chia-Hui Wang, Hsing-Shao Liu, Wanjiun Liao
2010 conf
ICC
Ming-Fong Jhang, Sheng-Wei Lin, Wanjiun Liao
2010 J jnl
Mob. Networks Appl.
Ming-Fong Jhang, Wanjiun Liao
2010 conf
ICC
Chao-Fong Shih, Tsung Ying Wu, Wanjiun Liao
2010 conf
VTC Spring
Hsing-Shao Liu, Ching-Chia Hsieh, Hsin-Chun Chen, Chih-Hung Hsieh, Wanjiun Liao, Po-Cheng Chu, Chia-Hui Wang
2010 conf
VTC Spring
Kun-Cheng Chung, Yi-Chin Li, Wanjiun Liao
2010 B conf
WCNC
Chao-Fang Shih, Wanjiun Liao
2010 B conf
GLOBECOM
Hsiao-Chen Lu, Chih-Hsiang Tang, Sheng-Wei Lin, Wanjiun Liao
2010 J jnl
IEEE Trans. Wirel. Commun.
Tehuang Liu, Wanjiun Liao
2010 B conf
GLOBECOM
Chia-Hung Chang, Wanjiun Liao
2010 conf
VTC Spring
Yean-Fu Wen, Wanjiun Liao
2010 C conf
QSHINE
Yean-Fu Wen, Wanjiun Liao
2009 J jnl
IEEE Commun. Mag.
Jeng Farn Lee, Wanjiun Liao, Jie-Ming Chen, Hsiu-Hui Lee
2009 J jnl
IEEE Commun. Lett.
Chia-Hung Chang, Wanjiun Liao
2009 J jnl
IEEE J. Sel. Areas Commun.
Chih-He Chiang, Wanjiun Liao, Tehuang Liu, Iam Kin Chan, Hsi-Lu Chao
2009 J jnl
Mob. Networks Appl.
Tehuang Liu, Wanjiun Liao, Jeng Farn Lee
2009 J jnl
IEEE Trans. Veh. Technol.
Yueh-Ting Wu, Wanjiun Liao, Cheng-Lin Tsao, Tsung-Nan Lin
2009 J jnl
IEEE Trans. Wirel. Commun.
Jia-Chun Kuo, Wanjiun Liao, Ting-Chao Hou
2009 J jnl
IEEE Trans. Wirel. Commun.
Tehuang Liu, Wanjiun Liao
2009 B conf
GLOBECOM
Hsiao-Chen Lu, Wanjiun Liao
2009 J jnl
IEEE Trans. Veh. Technol.
Phone Lin, Shin-Ming Cheng, Wanjiun Liao
2009 J jnl
IEEE Trans. Wirel. Commun.
Wanjiun Liao, Kun-Da Wu
2009 conf
ICC
Jin-Jia Chang, Wanjiun Liao, Ting-Chao Hou
2009 conf
ICC
Chia-Hung Chang, Wanjiun Liao
2008 B conf
PIMRC
Iam Kin Chan, Wanjiun Liao
2008 J jnl
IEEE Trans. Wirel. Commun.
Jeng-Farn Lee, Wanjiun Liao, Meng Chang Chen
2008 C conf
QSHINE
Tehuang Li, Wanjiun Liao
2008 J jnl
IEEE Trans. Wirel. Commun.
Kun-Da Wu, Wanjiun Liao
2008 B conf
GLOBECOM
Tehuang Liu, Wanjiun Liao
2008 A* conf
INFOCOM
Tehuang Liu, Wanjiun Liao
2008 J jnl
IEEE Trans. Veh. Technol.
Tehuang Liu, Wanjiun Liao
2008 B conf
GLOBECOM
Ming-Fong Jhang, Wanjiun Liao
2008 J jnl
IEEE Trans. Veh. Technol.
De-Nian Yang, Wanjiun Liao
2008 J jnl
IEEE Netw.
Tehuang Liu, Wanjiun Liao
2008 J jnl
IEEE Trans. Parallel Distributed Syst.
De-Nian Yang, Wanjiun Liao
2008 B conf
ICNP
De-Nian Yang, Wanjiun Liao
2008 J jnl
IEEE Trans. Wirel. Commun.
Kun-Da Wu, Wanjiun Liao
2008 J jnl
IEEE Trans. Wirel. Commun.
Wen-Hsing Kuo, Wanjiun Liao
2007 J jnl
Mob. Networks Appl.
Jeng Farn Lee, Wanjiun Liao, Meng Chang Chen
2007 A conf
ICME
Chia-Hui Wang, Mei-Wen Li, Wanjiun Liao
2007 A conf
ICME
Jeng Farn Lee, Jie-Ming Chen, Wanjiun Liao, Hsiu-Hui Lee, Meng Chang Chen
2007 B conf
GLOBECOM
Chih-He Chiang, Wanjiun Liao, Tehuang Liu
2007 J jnl
IEEE J. Sel. Areas Commun.
Cheng-Yu Hsieh, Wanjiun Liao
2007 J jnl
IEEE Commun. Mag.
Hong-Bin Chiou, David Morrison, Wanjiun Liao
2007 J jnl
IEEE Trans. Veh. Technol.
Jia-Chun Kuo, Wanjiun Liao
2007 J jnl
IEEE Trans. Veh. Technol.
Jia-Chun Kuo, Wanjiun Liao
2007 conf
ICC
Kun-Da Wu, Wanjiun Liao
2007 B conf
WCNC
Kun-Da Wu, Wanjiun Liao
2007 J jnl
IEEE Trans. Veh. Technol.
Jeng Farn Lee, Wanjiun Liao, Meng Chang Chen
2007 J jnl
IEEE Trans. Parallel Distributed Syst.
De-Nian Yang, Wanjiun Liao
2007 J jnl
Int. J. Sens. Networks
Kun-Da Wu, Wanjiun Liao
2007 J jnl
IEEE Trans. Broadcast.
Kai-Chien Chang, Wanjiun Liao
2007 J jnl
IEEE Trans. Wirel. Commun.
Ching-Ling Huang, Wanjiun Liao
2007 conf
ICC
Wen-Hsing Kuo, Tehuang Liu, Wanjiun Liao
2007 J jnl
IEEE Trans. Wirel. Commun.
Wen-Hsing Kuo, Wanjiun Liao
2006 J jnl
Inf. Process. Lett.
Jeng Farn Lee, Meng Chang Chen, Ming-Tat Ko, Wanjiun Liao
2006 conf
ICC
Tehuang Liu, Wanjiun Liao
2006 conf
CCNC
Yueh-Ting Wu, Cheng-Lin Tsao, Wanjiun Liao
2006 B conf
GLOBECOM
Jia-Chun Kuo, Wanjiun Liao
2006 conf
CCNC
Kun-Da Wu, Wanjiun Liao
2006 B conf
WCNC
Cheng-Lin Tsao, Yueh-Ting Wu, Wanjiun Liao, Jia-Chun Kuo
2006 conf
CCNC
Jia-Chun Kuo, Wanjiun Liao
2006 J jnl
IEEE Trans. Wirel. Commun.
Jui-Ting Weng, Jiunn Ru Lai, Wanjiun Liao
2006 conf
ICC
Kun-Da Wu, Wanjiun Liao
2006 J jnl
IEEE J. Sel. Areas Commun.
Kai-Chien Chang, Wanjiun Liao
2006 J jnl
IEEE Trans. Broadcast.
De-Nian Yang, Wanjiun Liao, Chang-Jung Kao
2006 conf
CCNC
Kai-Chien Chang, Wanjiun Liao
2006 J jnl
IEEE Trans. Commun.
Wanjiun Liao
2006 conf
ICC
Wen-Hsing Kuo, Wanjiun Liao
2005 B conf
GLOBECOM
Jeng Farn Lee, Wanjiun Liao, Meng Chang Chen
2005 C conf
QSHINE
Jeng Farn Lee, Wanjiun Liao, Meng Chang Chen
2005 J jnl
IEEE Trans. Multim.
Wanjiun Liao, Jen-Chun Chang, Victor O. K. Li
2005 B conf
GLOBECOM
Marco Ajmone Marsan, Marcus Brunner, Wanjiun Liao, Claudio Casetti
2005 C conf
FORTE
Yueh-Ting Wu, Wanjiun Liao, Cheng-Lin Tsao
2005 J jnl
IEEE Commun. Lett.
Yueh-Ting Wu, Tsung-Yen Ho, Wanjiun Liao, Cheng-Lin Tsao
2005 J jnl
IEEE Trans. Wirel. Commun.
Hsi-Lu Chao, Wanjiun Liao
2005 J jnl
IEEE Trans. Commun.
Wanjiun Liao, Chang-Jung Kao, Chin-Hei Chien
2005 C conf
BROADNETS
Jeng Farn Lee, Wanjiun Liao, Meng Chang Chen
2005 conf
ICC
Jia-Chun Kuo, Wanjiun Liao
2005 conf
ICC
Chong-Wei Bao, Wanjiun Liao
2005 B conf
LCN
Jeng Farn Lee, Wanjiun Liao, Meng Chang Chen
2005 B conf
GLOBECOM
Wen-Hsing Kuo, Wanjiun Liao
2004 J jnl
IEEE Trans. Multim.
Wanjiun Liao, Laura Huei-jiun Ju
2004 J jnl
IEEE Trans. Wirel. Commun.
Hsi-Lu Chao, Wanjiun Liao
2004 C conf
ISCC
Kai-Chien Chang, Wanjiun Liao
2004 B conf
PIMRC
Jiunn Ru Lai, Wanjiun Liao
2004 B conf
GLOBECOM
De-Nian Yang, Wanjiun Liao
2004 A* conf
INFOCOM
De-Nian Yang, Wanjiun Liao
2004 J jnl
IEEE Trans. Broadcast.
Wanjiun Liao, De-Nian Yang
2004 A conf
ICME
Shengyuan Jan, Wanjiun Liao
2003 A conf
ICME
Chin-Hei Chien, Wanjiun Liao
2003 B conf
LCN
Cheng-Yu Hsieh, Wanjiun Liao
2003 J jnl
J. VLSI Signal Process.
Wanjiun Liao, De-Nian Yang
2003 J jnl
IEEE J. Sel. Areas Commun.
Hsi-Lu Chao, Wanjiun Liao
2003 A* conf
INFOCOM
Wanjiun Liao
2003 J jnl
IEEE Trans. Veh. Technol.
Wanjiun Liao, Ming-Yu Jiang
2003 B conf
PIMRC
Wen-Hsing Kuo, Wanjiun Liao
2002 B conf
ICCCN
Laura Huei-jiun Ju, Wanjiun Liao
2002 B conf
LCN
Hsi-Lu Chao, Jia-Chun Kuo, Wanjiun Liao
2002 conf
ICC
Ming-Yu Jiang, Wanjiun Liao
2002 conf
ICME (1)
Laura Huei-jiun Ju, Wanjiun Liao
2002 B conf
GLOBECOM
Chi-Hong Loi, Wanjiun Liao, De-Nian Yang
2002 conf
ISPAN
Victor O. K. Li, Wanjiun Liao
2001 B conf
GLOBECOM
Jiunn Ru Lai, Wanjiun Liao
2001 A conf
ICME
Jen-Chun Chang, Wanjiun Liao
2001 conf
ICC
Yi-Der Li, Wanjiun Liao
2001 J jnl
IEEE Trans. Multim.
De-Nian Yang, Wanjiun Liao, Yen-Ting Lin
2001 J jnl
IEEE Trans. Veh. Technol.
Wanjiun Liao
2001 conf
ICC
Jiunn Ru Lai, Wanjiun Liao, Ming-Yu Jiang, Chien-An Ke
2001 J jnl
IEEE Trans. Consumer Electron.
Jiunn Ru Lai, Wanjiun Liao
2001 B conf
ICNP
Chang-Jung Kao, De-Nian Yang, Wanjiun Liao
2000 A conf
IEEE International Conference on Multimedia and Expo (II)
De-Nian Yang, Wanjiun Liao, Yen-Ting Lin
2000 B conf
WCNC
Chien-An Ke, Wanjiun Liao
2000 B conf
GLOBECOM
Wanjiun Liao, Chien-An Ke, Jiunn Ru Lai
2000 J jnl
IEEE Commun. Mag.
Wanjiun Liao, Jen-Chi Liu
1999 A* conf
INFOCOM
Wanjiun Liao
1999 conf
ICC
Wanjiun Liao
1999 B conf
ICNP
Wanjiun Liao, De-Nian Yang
1998 J jnl
Multim. Syst.
Wanjiun Liao, Victor O. K. Li
1997 J jnl
Proc. IEEE
Victor O. K. Li, Wanjiun Liao
1997 A* conf
INFOCOM
Wanjiun Liao, Victor O. K. Li
1997 J jnl
IEEE Multim.
Wanjiun Liao, Victor O. K. Li
1996 J jnl
IEEE J. Sel. Areas Commun.
Victor O. K. Li, Wanjiun Liao, Xiaoxin Qiu, Eric W. M. Wong
1996 B conf
MMM
Wanjiun Liao, Victor O. K. Li
redb/extractors/macho_extractors/macho_features.py
← Index redb/extractors/macho_extractors/macho_features.py python
import inspect
import json
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachO


class MachOFeaturesExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_features"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.MACHO_FEATURES.value

    def _extract_macho_features_for_arch(self, arch_name):
        """Extract basic MachO features for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get general info using new API
            general_info = self.macho.get_general_info()
            if not general_info:
                return None

            # Get header info for this specific architecture
            header_raw = self.macho.get_macho_header(arch=arch_name)
            header_formatted = self.macho.get_macho_header(arch=arch_name, formatted=True)

            if not header_raw or not header_formatted:
                return None

            # Get entry point using new API
            entry_point = None
            try:
                entry_point_info = self.macho.get_entry_point(arch=arch_name)
                if entry_point_info:
                    if isinstance(entry_point_info, dict):
                        entry_point = entry_point_info.get('entryoff') or entry_point_info.get('entry_address')
                    else:
                        entry_point = entry_point_info
            except Exception as e:
                self.log.debug(f"No entry point found: {e}")

            # Get UUID using new API
            uuid = None
            try:
                uuid_info = self.macho.get_uuid(arch=arch_name)
                if uuid_info:
                    uuid = str(uuid_info)
            except Exception as e:
                self.log.debug(f"No UUID found: {e}")

            # Get version info using new API with formatting
            version_info = None
            version_info_str = None
            try:
                version_info = self.macho.get_version_info(arch=arch_name)
                version_info_str = self.macho.get_version_info(arch=arch_name, formatted=True)
            except Exception as e:
                self.log.debug(f"No version info found: {e}")

            # Get segments using new API
            segments = self.macho.get_segments(arch=arch_name)
            number_of_segments = len(segments) if segments else 0

            # Get dylib info using new API
            dylib_names = self.macho.get_dylib_names(arch=arch_name)
            number_of_dylibs = len(dylib_names) if dylib_names else 0

            # Count imports using new API
            imported_functions = self.macho.get_imported_functions(arch=arch_name)
            number_of_imports = sum(len(funcs) for funcs in imported_functions.values()) if imported_functions else 0

            # Count exports using new API
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)
            number_of_exports = sum(len(symbols) for symbols in exported_symbols.values()) if exported_symbols else 0

            # Get unique load command types using new API
            load_commands_set = self.macho.get_load_commands_set(arch=arch_name, formatted=True)
            if isinstance(load_commands_set, set):
                load_commands_set = sorted(list(load_commands_set))

            # Get architectures for listing purposes
            architectures = self.macho.get_architectures()

            # Determine binary properties
            is_64bit = header_raw.get('magic') in [0xFEEDFACF, 0xCFFAEDFE]  # MH_MAGIC_64, MH_CIGAM_64
            is_signed = self._is_signed()
            
            # Create MachO dataclass
            macho_features = MachO(
                # Raw values from new API
                magic=header_raw.get('magic', 0),
                cputype=header_raw.get('cputype', 0),
                cpusubtype=header_raw.get('cpusubtype', 0),
                filetype=header_raw.get('filetype', 0),
                ncmds=header_raw.get('ncmds', 0),
                sizeofcmds=header_raw.get('sizeofcmds', 0),
                flags=header_raw.get('flags', 0),
                architecture=header_raw.get('cputype', 0),  # Use cputype as architecture
                architectures=[arch_info.get('cputype', 0) for arch_info in [self.macho.get_macho_header(arch=arch) for arch in architectures] if arch_info],
                # Human-readable values from formatted API
                magic_str=header_formatted.get('magic', ''),
                cputype_str=header_formatted.get('cputype', ''),
                cpusubtype_str=header_formatted.get('cpusubtype', ''),
                filetype_str=header_formatted.get('filetype', ''),
                flags_str=header_formatted.get('flags', '').split(', ') if header_formatted.get('flags') else [],
                architecture_str=header_formatted.get('cputype', ''),
                architectures_str=[arch_info.get('cputype', '') for arch_info in [self.macho.get_macho_header(arch=arch, formatted=True) for arch in architectures] if arch_info],
                # Additional properties
                is_64bit=is_64bit,
                is_signed=is_signed,
                number_of_load_commands=header_raw.get('ncmds', 0),
                load_commands_set=load_commands_set,
                number_of_segments=number_of_segments,
                number_of_dylibs=number_of_dylibs,
                number_of_imports=number_of_imports,
                number_of_exports=number_of_exports,
                entry_point=entry_point,
                uuid=uuid,
                version_info=version_info,
                version_info_str=version_info_str
            )
            
            return macho_features
            
        except Exception as e:
            self.log.error(f"Error extracting MachO features: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            if not self.macho:
                return None
            architectures = self.macho.get_architectures()
            if not architectures:
                return None

            # For FAT binaries, return features for all architectures
            # For single arch, return just the single result
            if len(architectures) > 1:
                # FAT binary - return list of features for each architecture
                results = []
                for arch_name in architectures:
                    features = self._extract_macho_features_for_arch(arch_name)
                    if features:
                        # Add architecture identifier to the result
                        if hasattr(features, '__dict__'):
                            # If it's a dataclass, we can access its dict
                            features.arch_identifier = arch_name
                        results.append(features)
                return results
            else:
                # Single architecture - return single result
                return self._extract_macho_features_for_arch(architectures[0])
        except Exception as e:
            self.log.error(f"Error extracting MachO features: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in __init__)
            try:
                architectures = self.macho.get_architectures()
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Extract features for this specific architecture
                macho_features = self._extract_macho_features_for_arch(arch_name)
                if not macho_features:
                    continue

                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific hash for {arch_name}: {e}")
                    arch_sha256 = self.sha256

                # Architecture field (kept in features table for ORDER BY)
                architecture = macho_features.cputype    # Raw CPU type value

                data.append([
                    arch_sha256,                          # sha256 (architecture-specific)
                    architecture,                         # architecture (raw CPU type)
                    # Raw values
                    macho_features.magic,                 # magic
                    macho_features.cputype,               # cputype
                    macho_features.cpusubtype,            # cpusubtype
                    macho_features.filetype,              # filetype
                    macho_features.ncmds,                 # ncmds
                    macho_features.sizeofcmds,            # sizeofcmds
                    macho_features.flags,                 # flags
                    # Human-readable values
                    macho_features.magic_str,             # magic_str
                    macho_features.cputype_str,           # cputype_str
                    macho_features.cpusubtype_str,        # cpusubtype_str
                    macho_features.filetype_str,          # filetype_str
                    macho_features.flags_str,             # flags_str
                    # Other fields
                    macho_features.is_64bit,              # is_64bit
                    macho_features.is_signed,             # is_signed
                    macho_features.entry_point if macho_features.entry_point else None,           # entry_point
                    macho_features.uuid if macho_features.uuid else None,  # uuid
                    json.dumps(macho_features.version_info) if macho_features.version_info else "{}",  # version_info
                    json.dumps(macho_features.version_info_str) if macho_features.version_info_str else "{}",  # version_info_str
                    macho_features.load_commands_set,     # load_commands_set
                    macho_features.number_of_segments,    # number_of_segments
                    macho_features.number_of_dylibs,      # number_of_dylibs
                    macho_features.number_of_imports,     # number_of_imports
                    macho_features.number_of_exports,     # number_of_exports
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256', 'architecture',
                # Raw values
                'magic', 'cputype', 'cpusubtype', 'filetype', 'ncmds', 'sizeofcmds', 'flags',
                # Human-readable values
                'magic_str', 'cputype_str', 'cpusubtype_str', 'filetype_str', 'flags_str',
                # Other fields
                'is_64bit', 'is_signed',
                'entry_point', 'uuid', 'version_info', 'version_info_str', 'load_commands_set',
                'number_of_segments', 'number_of_dylibs', 'number_of_imports', 'number_of_exports',
                'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)', 'Nullable(UInt32)',
                # Raw values
                'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32',
                # Human-readable values
                'LowCardinality(String)', 'LowCardinality(String)', 'LowCardinality(String)', 'LowCardinality(String)', 'Array(LowCardinality(String))',
                # Other fields
                'UInt8', 'UInt8',
                'Nullable(UInt64)', 'Nullable(String)', 'JSON', 'JSON', 'Array(Nullable(String))',
                'UInt32', 'UInt32', 'UInt32', 'UInt32', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)
        
        return None

    def get_clickhouse_table(self) -> str:
        return "redb_macho_features"