Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这(潜在的恶意)Java代码试图做什么?_Java_Buffer Overflow - Fatal编程技术网

这(潜在的恶意)Java代码试图做什么?

这(潜在的恶意)Java代码试图做什么?,java,buffer-overflow,Java,Buffer Overflow,在Reddit上,一位用户声称他们发现了“Java中的一个潜在bug”,并提供了以下代码: import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; public class Java_bug_demonstration{ public static void main(String[]str_data){ ArrayList<Short>[]s_al_a

在Reddit上,一位用户声称他们发现了“Java中的一个潜在bug”,并提供了以下代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
public class Java_bug_demonstration{
    public static void main(String[]str_data){
        ArrayList<Short>[]s_al_arr=new ArrayList[683];
        short s0=-1,s1=0;
        while(s1<2266){
            short s2=Short.parseShort("i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i9i0i0i0i0i0i0i0i0i0i0j1i0j2i0i2i0i0i0i0i0i0i0i0i0i0i0i0id1miji0i0i0iqi0i0iqihi0i7i0i0i0i0i0idiui0i0i0i0i0i0i0ibi0i0i0i0jyi0i0jqi0i0i0iz29iii0i0i0j8kriu26i0i0itifi0j91ciiiui0i0kqi9j72yi0kyi0i0i0iw1si0i0i9i0i0i0i0i0l5i0i0jjig0w1ji0i0i0i0jvi0i0i0i0j824ko3jlji0i0keid2xiw1k3ii10220i0i0i0i0j0i0i0i1maj82li52mlplhi0lf3ykhi0i0la3mi920i0kn3li0iri0i0i0i0le47lui0i0ic41jk36m9i6l4idkyi0ke32i0lii0k6j82o3039i0i0i0i0i0m3ioi0jsix164pke4ii0moiy3iin5dij2ok9i0i0i0i0ip3ui0i0jlk12ike2xi0k5i0k3jci0mg566koji0js5ymgj3l5496ei0i8132v2yk4nt6gi0kuogi0i0j01t33i0mo53i0ndi0i52xoii0i95snlk34hmmoji0mw6sk32pi0i0ir0ti75wi0i0i0ih5l6ni0i0moi0i0i0jq55577rihi0j57yje297cit2m3x6ui0mgi0kz4q6no37pori0mvi0it1ri0i77dmc6zjk2q5litlq4g4tigi0pxlw54lv4e77nci0i0i0m148jm2qi0iz3c4jpbih3y54i0j0n0mki0k8397ki0i0mp4qmz7o87i0mhk72n81mfiv2h98nx5zjv4ni0iumt6ci12r2x95i0jui0i0i0le5ej81s3g7yqqi0pkkb3b454ip6jjk1ls7ekf5fl79qopi0lv445kmail2e80j41fjwoym552l0mgnwkko06nke4487a2ol9bk4i0lmi76ljm56aai0i0i0ib2l6ai0jfi0n09jjp5s9pjp5gi0j3i0rsqpi0oynnkyrblmk363onii7ub3icq4lwqxanrui0i0p6a3i0j88tbgoin56c7v9mododkg3d53ie3p8patla3v8k9vk86r9oq9bdjm6pivb5kj5h5iaej6i0i0snmci0rxomqr91j1b5i0kgknix1q309ekm345n6x94jq406ibvo8o376i0im0w42qopk9zi0js90nq6p7g9zasnj8yif7wnm6akn3bcgk73sbcngnbi9pji0i6081za6o8kznw8kmj9xi0mykfbgogcrt0onkr78admsbbrublc6i0i0i0is2c2m46i0iy47o0a0b8np7jmr6t7qiy4uaiauou91qeiy2b4c5o9nbdq7teivc7i2bbrki0os9pv5n0d5ozkv4zndbmr7auqwpci0kfqq8zb3v0dro9md60cui0pz87i0ncmlik2i8d9tmxid3uaqd6kdave3l8394rn1j44o7ha1j94687ohtjo7jh67e1p58gjm2bl05g7oim0xtdbmn6i0m46gqijfi0ly9te7m0mw9yeaqzsapxv9od8pb5rlb1cmje8ub8baitc7doj4vbnnaiatnpcillln4i6clx7vjp2i6btkj52e91uoly7ljm2qequiesk5j150dxi0i0pjb9eijbsedfln7k8xi0i74pxijm2l3m4sezm8545o7h898omt8kixbsj11huzi0m9epnbapjj2l4q4vf1m37ratbgeon5boe3pra7i0sccvi0uxi0m7ogq6eisudrib2jaofijodci94v8f8ke8ij2h4t8we0u7d2oojveoo594k9apdky0imrevqy6ppepmd4t7m9rk24nc2gspjcfypj04ccti823js26wfgcit0y8nkd49ewih33bpjv96crtddnfwt4h6ie2h9an27ce2i0nqa3dcy9i57b87c8d0md6drrm15x94mf99efsxjoaitkchd2esj11r3uhoi0lu6iaxg4lu7texqydrhdwqfll26zbyefoveygmhptaphc6grja98g7pxn369b6gnke5cawh6jb4d6vkntiis8bfmtde6rsweeyn1b0czdli63a8ki0kzbcgokn3o60zyq8bnvni0r6ubmwebj6ejfku6hooa6sa2eaereyi0ir1g6nale1ewu6g9guy4iy508j8yflii102o3x5ygwmvc5fvg1ovdjqhc9dqwwfs".substring(s1++,++s1),36);
            if(s2>=648){s_al_arr[++s0]=new ArrayList<Short>();}
            if(s2!=648){
                s_al_arr[s0].add((short)(s2%648));
                s_al_arr[s2%648].add(s0);}}
        LinkedList<Short>q=new LinkedList<Short>();
        short[] ERROROUS_ARR=new short[s_al_arr.length];
        boolean[] b_arr=new boolean[s_al_arr.length];
        for(short s2=0;s2<s_al_arr.length;s2+=1){
            for(int i0=0;i0<ERROROUS_ARR.length;i0+=1){
                b_arr[i0]=false;
                ERROROUS_ARR[i0]=-1;
                if(ERROROUS_ARR[i0]!=-1){System.out.println("ERROROUS_ARR[i0] is always -1 here. So this line is not printed.");}}
            for(int i0=0;i0<ERROROUS_ARR.length;i0+=1){
                if(ERROROUS_ARR[i0]==0){
                    System.out.println("BUG!!!: ERROROUS_ARR:"+Arrays.toString(ERROROUS_ARR));
                    System.exit(1);}}
            b_arr[s2]=true;
            q.add(s2);
            while(!q.isEmpty()){
                short i1=q.remove();
                for(int i0=0;i0<s_al_arr[i1].size();i0+=1){
                    short s3=s_al_arr[i1].get(i0);
                    if(!b_arr[s3]){
                        b_arr[s3]=true;
                        ERROROUS_ARR[s3]=i1;
                        q.add(s3);}}
                if(i1>s2){while(i1!=-1){i1=ERROROUS_ARR[i1];}}//bug occurs, but with smaller probability if this line is removed.
                ERROROUS_ARR[s2]=-1;/*bug occurs, but with smaller probability if this statement is removed.*/}}
        System.exit(0);}}

import java.util.ArrayList;
导入java.util.array;
导入java.util.LinkedList;
公共类Java_bug_演示{
公共静态void main(字符串[]str_数据){
ArrayList[]s_al_arr=新的ArrayList[683];
短s0=-1,s1=0;
而(s1=648){s_al_arr[++s0]=new ArrayList();}
如果(s2!=648){
s_al_arr[s0]。添加((短)(s2%648));
s_al_arr[s2%648]。添加(s0);}
LinkedListq=新建LinkedList();
short[]ERROROUS_ARR=新的short[s_al_ARR.length];
布尔值[]b_arr=新布尔值[s_al_arr.length];

对于(短s2=0;s2那个很长的字符串…您正在将子字符串从索引
s1++
提取到
++s1
(这将是从
s1
s1+2
的2个字符。然后您使用基数36将其解析为一个整数。不确定您为什么要这样做,但所有内容都有适当的边界,所以对我来说它看起来不像任何类型的溢出。

如果某个错误以某种概率发生,那么我会假设这是因为一个竞赛条件JVM中的错误。我在一个在线Java解析器中运行了代码,但我没有看到任何错误发生的迹象。您是否验证了某些版本的Java最终会打印
错误!!!
行?我尝试在线运行它,但解析器抱怨代码不安全。用户没有指定Java版本。这里的原始线程,我如果您感兴趣:它与信息安全有什么关系?这个问题在这里是离题的。这是一个编程问题。我们这里不分析随机代码。否则我们将被随机代码淹没。同意:尝试此迁移的人肯定不太了解堆栈溢出。我可以看到正在发生的事情。我怀疑字符串的长度、开头重复的字符(如溢出中的NOP)以及原始海报(一小时前加入Reddit)的建议它只有在从终端运行时才能工作,而在IDE中通过时则无法工作。这对我来说是个骗局。我并不是说代码不是恶意的。它的编写绝对是为了故意让人难以阅读,所以我不知道它实际上在做什么,我只是回答你关于长字符串是否是缓冲区溢出的问题。