BUUCTF [SUCTF2019]SignIn

发布时间:2026/7/9 8:30:44
BUUCTF [SUCTF2019]SignIn 考点flag每个字符转为2位十六进制RSA加密查壳没有壳直接进入ida左侧function栏进入start函数。F5进入伪代码视图然后进入main可知加密过程是先把flag每个字符转为2位十六进制再进行RSA加密sub_96A把flag每个字符转为2位十六进制flag每个字符→ASCII→十六进制→拆成两个字符→v9egf→ASCII码是102→102的十六进制是0x66→拆成两个字符‘6’和‘6’→得到v9为两个字符“66”详解fASCII码102102的二进制0110 0110这 8 位分成 前 4 位 和 后 4 位二进制0110 0110^^^^ ^^^^高4位 低4位1、flag[v3] 4向右移动 4 位0110 0110 原始 8 位向右移4位0000 0110 6flag[v3] 4 → 得到数字 6byte_202010[6] → 得到字符 62、flag[v3] 0xF0xF 二进制 11110110 0110 0000 1111 0000 0110 6flag[v3] 0xF → 得到数字 6byte_202010[6] → 得到字符 6两句合起来的最终结果高4位 → 6 → 字符 6低4位 → 6 → 字符 61 个字符 f → 变成 2 个字符 66__gmpz_powm(v6, v6, v5, v4)RSA已知模数n用网站factordb.com分解得到两个大质数p 101780216806150428557084704862144749470340191545066652096812646385767597451269 q 101651412639981083987459773169944491895705783512228033733244898320286521249221rsa解密得flag# # 1. 题目已知固定参数 # c_hex ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35 N 103461035900816914121390101299049044413950405173712170434161686539878160984549 e 65537 # # 2. N分解出 p 和 q (已算好) # p 282164587459512124844245113950593348271 q 366669102002966856876605669837014229419 # # 3. 计算私钥 d # phi (p - 1) * (q - 1) d pow(e, -1, phi) print( 私钥 d , d) # # 4. RSA 解密得到 v9 # c int(c_hex, 16) v9_num pow(c, d, N) v9 hex(v9_num)[2:] # 转十六进制字符串 print(\n✅ v9 , v9) # # 5. v9 解码 → 原始 Flag (关键) # # v9 是十六进制编码字符串 → 直接解码回字符串 raw_bytes bytes.fromhex(v9) flag raw_bytes.decode(utf-8) print(解码结果UTF-8:, flag) print(\n 最终 Flag , flag)flag{6e301bdc7a73d5202577a481442cb1b98eeee757379949492f02f04dafcbc076f9f59f5ff939da}