在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2671|回复: 3

研究某个软件的patch

[复制链接]
发表于 2022-8-16 23:06:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
目前在研究某个软件,请问这个JAVA函数返回是一个布尔值,请问反汇编如何让这个函数永远返回1。
这里是java代码
/* 3000 */     Security.addProvider((Provider)(certicom = new Certicom())); String str; if ((str = (String)((a != null) ? a : (a = certicom.getName()))) == null)
/*      */       throw new d(-514, 4026);
/*      */     SystemConfig systemConfig;
/*      */     (systemConfig = SystemConfig.getConfig()).setConformance(16);
/*      */     systemConfig.setPtCompression(2);
/*      */     systemConfig.setFormat(10);
/*      */     switch (paramInt) {
/*      */       case 2:
/*      */         break;
/*      */       case 3:
/*      */         systemConfig.setCurve("sect163k1");
/*      */         break;
/*      */       case 4:
/*      */         systemConfig.setCurve("sect239k1");
/*      */         break;
/*      */       default:
/*      */         throw new d(-515, 4027);
/*      */     }
/*      */     PublicKey publicKey;
/*      */     if ((publicKey = paraml.a(paramInt)) == null)
/*      */       throw new d(-515, 4028);
/*      */     byte[ arrayOfByte = publicKey.getEncoded();
/*      */     try {
/*      */       PublicKey publicKey1;
/*      */       KeyFactory keyFactory = KeyFactory.getInstance("ECDSA");
/*      */       if (paramInt == 2) {
/*      */         ECDSA.setThreadOldHashTruncate(true);
/*      */         int[ arrayOfInt = { 9 };
/*      */         String str1 = "1.3.132.0.4";
/*      */         F2mParameterSpec f2mParameterSpec = new F2mParameterSpec(Conversion.HexString2OS("3088250ca6e7c7fe649ce85820f7"), Conversion.HexString2OS("e8bee4d3e2260744188be0e9c723"), Conversion.HexString2OS("10e723ab14d696e6768756151756febf8fcb49a9"), Conversion.HexString2OS("9d73616f35f4ab1407d73562c10f"), Conversion.HexString2OS("a52830277958ee84d1315ed31886"), Conversion.HexString2OS("100000000000000d9ccec8a39e56f"), 2, 113, arrayOfInt, str1);
/*      */         ECRawPublicKeySpec eCRawPublicKeySpec = new ECRawPublicKeySpec(arrayOfByte, (ECParameterSpec)f2mParameterSpec);
/*      */         publicKey1 = keyFactory.generatePublic((KeySpec)eCRawPublicKeySpec);
/*      */       } else {
/*      */         X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec((byte[)publicKey1);
/*      */         publicKey1 = keyFactory.generatePublic(x509EncodedKeySpec);
/*      */       }
/*      */       Signature signature;
/*      */       (signature = Signature.getInstance("ECDSA", str)).initVerify(publicKey1);
/*      */       signature.update(paramArrayOfbyte1);
/*      */       bool = signature.verify(paramArrayOfbyte2);
/*      */     } catch (NoSuchAlgorithmException noSuchAlgorithmException) {
/*      */       throw new d(-515, 4029);
/*      */     } catch (InvalidKeySpecException invalidKeySpecException) {
/*      */       throw new d(-515, 4030);
/*      */     } catch (InvalidKeyException invalidKeyException) {
/*      */       throw new d(-515, 4031);
/*      */     } catch (NoSuchProviderException noSuchProviderException) {
/*      */       throw new d(-515, 4032);
/*      */     } catch (SignatureException signatureException) {
/*      */       throw new d(-515, 4033);
/*      */     }
/*      */     return bool;
/*      */   }
/*      */ }

这里是对应的反汇编代码
1065 ldc #7 <ECDSA>1067 aload 51069 invokestatic #133 <java/security/Signature.getInstance : (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Signature;>1072 dup1073 astore 61075 aload 81077 invokevirtual #134 <java/security/Signature.initVerify : (Ljava/security/PublicKey;)V>1080 aload 61082 aload_01083 invokevirtual #135 <java/security/Signature.update : ([B)V>1086 aload 61088 aload_11089 invokevirtual #136 <java/security/Signature.verify : ([B)Z>1092 istore 101094 goto 1157 (+63)1097 pop1098 new #34 <com/a/a/d>1101 dup1102 sipush 650211105 sipush 41071108 invokespecial #99 <com/a/a/d.<init> : (II)V>1111 athrow1112 pop1113 new #34 <com/a/a/d>1116 dup1117 sipush 650211120 sipush 41081123 invokespecial #99 <com/a/a/d.<init> : (II)V>1126 athrow1127 pop1128 new #34 <com/a/a/d>1131 dup1132 sipush 650211135 sipush 41091138 invokespecial #99 <com/a/a/d.<init> : (II)V>1141 athrow1142 pop1143 new #34 <com/a/a/d>1146 dup1147 sipush 650211150 sipush 41101153 invokespecial #99 <com/a/a/d.<init> : (II)V>1156 athrow1157 iload 101159 ireturn


aaaa.png
 楼主| 发表于 2022-8-16 23:12:23 | 显示全部楼层
反汇编应该是1089行调用了某个验证函数,直接就返回一个bool值。
 楼主| 发表于 2022-8-16 23:42:19 | 显示全部楼层
如何让这个函数永远返回1,返回1,就可以顺利运行这个程序。
2222.png
发表于 2022-8-17 12:49:11 | 显示全部楼层


hithust 发表于 2022-8-16 23:42
如何让这个函数永远返回1,返回1,就可以顺利运行这个程序。


ICONST_1
IRETURN
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-10 14:44 , Processed in 0.021883 second(s), 8 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表