From 05f420dcae0a1f7afc563aa3ff18fa95ccf53d5c Mon Sep 17 00:00:00 2001 From: Vladimir Date: Sun, 21 Jan 2024 22:06:36 +0300 Subject: [PATCH] Add auto TLS fingerprint (#51) Co-authored-by: Sleeyax Co-authored-by: vladimir.razdrogin --- .gitignore | 3 +- README.md | 18 +- build.sh | 2 +- docs/advanced_diagram.png | Bin 0 -> 18536 bytes docs/advanced_settings.png | Bin 0 -> 33650 bytes docs/basic_diagram.png | Bin 0 -> 14216 bytes docs/diagram.png | Bin 20741 -> 0 bytes docs/screenshot.png | Bin 77780 -> 0 bytes docs/settings.png | Bin 0 -> 24947 bytes src-go/server/cmd/main.go | 40 ++- src-go/server/go.mod | 1 + src-go/server/go.sum | 2 + src-go/server/intercept.go | 233 +++++++++++++++ src-go/server/internal/tls/clienthello.go | 2 +- src-go/server/internal/tls/dialer.go | 66 ----- src-go/server/internal/tls/factory.go | 15 +- src-go/server/internal/tls/fingerprint.go | 6 +- src-go/server/internal/transport.go | 70 +++-- src-go/server/server.go | 77 ++++- src-go/server/server_test.go | 2 +- src/main/java/burp/BurpExtender.java | 44 ++- src/main/java/burp/RequestConfig.java | 13 + src/main/java/burp/ServerLibrary.java | 4 +- src/main/java/burp/Settings.java | 62 +++- src/main/java/burp/SettingsTab.form | 346 ++++++++++++++-------- src/main/java/burp/SettingsTab.java | 184 +++++++++--- src/main/java/burp/TransportConfig.java | 16 +- 27 files changed, 876 insertions(+), 330 deletions(-) create mode 100644 docs/advanced_diagram.png create mode 100644 docs/advanced_settings.png create mode 100644 docs/basic_diagram.png delete mode 100644 docs/diagram.png delete mode 100644 docs/screenshot.png create mode 100644 docs/settings.png create mode 100644 src-go/server/intercept.go delete mode 100644 src-go/server/internal/tls/dialer.go create mode 100644 src/main/java/burp/RequestConfig.java diff --git a/.gitignore b/.gitignore index 4d05463..ca5c10c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ -/.idea/ +.idea /.gradle/ /build/ *.h *.so *.dll *.dylib +.DS_Store \ No newline at end of file diff --git a/README.md b/README.md index 378ebcf..bf7fefb 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ It boosts the power of Burp Suite while reducing the likelihood of fingerprintin It does this without resorting to hacks, reflection or forked Burp Suite Community code. All code in this repository only leverages Burp's official Extender API. -![screenshot](./docs/screenshot.png) +![screenshot](./docs/settings.png) ## Showcase [CloudFlare bot score](https://cloudflare.manfredi.io/en/tools/connection): @@ -24,7 +24,7 @@ Then, the local server forwards the response back to Burp. The response header o Configuration settings and other necessary information like the destination server address and protocol are sent to the local server per request by a magic header. This magic header is stripped from the request before it's forwarded to the destination server, of course. -![diagram](./docs/diagram.png) +![diagram](./docs/basic_diagram.png) > :information_source: Another option would've been to code an upstream proxy server and connect burp to it, but I personally needed an extension for customization and portability. @@ -36,8 +36,18 @@ This magic header is stripped from the request before it's forwarded to the dest ## Configuration This extension is 'plug and play' and should speak for itself. You can hover with your mouse over each field in the 'Awesome TLS' tab for more information about each field. -To load your custom Client Hello, you can capture it in Wireshark, copy client hello record as hex stream and paste it into the field "Hex Client Hello". -![screenshot](./docs/wireshark_capture_client_hello.png) +
+ Advanced usage + +In the 'advanced' tab, you can enable an additional proxy listener that will automatically apply the current fingerprint from the request: + +![screenshot](./docs/advanced_settings.png) + +When enabled, the diagram changes to this: + +![diagram](./docs/advanced_diagram.png) + +
## Manual build Instructions This extension was developed with JetBrains IntelliJ (and GoLand) IDE. diff --git a/build.sh b/build.sh index dc1c392..b9c02e5 100755 --- a/build.sh +++ b/build.sh @@ -107,4 +107,4 @@ copy_linux_arm copy_linux_arm64 copy_windows_amd64 copy_windows_386 -buildJar "fat" +buildJar "fat" \ No newline at end of file diff --git a/docs/advanced_diagram.png b/docs/advanced_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..6255de5b66ff5bfc3daf237dfccff6211cd61cf1 GIT binary patch literal 18536 zcmZU42RPi%^Kc@P5F|>J=%*%nJ)JncobHMm<@DZ9ltk1B4pD;eB_z>%Z;2>}=)DJr zAc)?1Kfb@;`#%5w^FGer=Vte_J3BiwJ3BKQrK6=n@__city{N9)KnGqZr#Ge0ndH} z_kgk?Yt0Mzy6vf_0=ZSvPrrWa*1Z!iC4`r=pN+i}>K41O!hfFFg#_$eJ-yh471@P^ zEZp4qtnDpqJuI9(`CL$500^jecD1&*u}4||r;U(+kT9>H5U-G+fq(?Nu)K&UPza0g z35f_8{inT!Ez0G;9YS6G?VX$~*oBlu`2>Kjo|MNEJ?+?qA;51n7cZ0(@C|^0 zQd=J=5Wv5nfVrTkx!5z{QQpnX2?a-4YS;tVD2ob<@d<+g@KX&{1E?mukOJ`RWbcRq zzEn_Fj;=SaDA;+pIs*`8K_LOYfByiWzJ-m2hyDNP;$~(jFALlM%t~3wLDw0Cv+@8kvf#Q6Z|O@$ZQ4fP+WHOj}{3K&p`U04Yq?0+c; zG;y&2@c5Uq?1}>H@`CJ&g6!f#|CRzb5XgT@#ebj0|AmA93kQhspJD9(OLsqnu7#GM zwYIIOikF0@h^iGD3Xtn&NKu%brKNN6jeq26t%U0DnDy+c?amtlc%Mf6V%mS zTtHVv&r!un*&6~uI-rHstl>Z<8sV!cB5$b$b+c7hv~yKcgeo~X*eiqeKgr~QYjWSx^(j5(Vb+ORZRrGcjlowHTRT6de(?@vd3VHiG+CyEC zU``7kN)l5j#(Nl)I6uhl7%x zm4K@&T1W_@Z3F{emvXqUCB<=%E@2JP*D$|;^XV&rYE3h z?duHlbl0+XHc&RSR`szKR`+s5Sm`Qy00S#)D+?zVT@?LL zcHSO>LK+A`I}uH|CD2q`*jm#_*VEs?6=?2kDB^D=st$ntt+YK1wJqULMMn`a4OO@* z(n}Yt0oL|+P=KNR3>=)G5F@A}RM}C-Ur@qM9SrfZg+iRfH7tcu8eS3xx-d_KguS-6 zpNFa%N=;qYPgC8_6>6`j=!Zn583~fZAPB2GB9T?bI*jf>)Z{+C$ zC=rOQE!qyO;jW;qp`_-n=&tYY0`+oLata?rjJ1(>3@ zj;Di`khLnx&)rwVTf)O#*cX7KRmJTcES2?r^fW{S9rYx91e6f=3Rdn&0i?eu*axMr zW}&99=7Sb>)X=cEMp?V78#+2FxuKytT2Q2}t=>%^f&vm62rFkhn2WtFfErv&P(w=) zAz^?P(AC!l>g`p(G;crUIZU1Q+pg5E9bxba7D;(o&bO zQ1|qPiXa6Qg#|tRHEoeFRfMRT2iU+(OUYGJ+0MWj=uXK(!p~VzNe>Ef7j{DGsjAuQ zDC#STK@A;6gk4=!gy9ZC0_p(sL%h{}#lc_~S1U0~q#)c+OVPl}UDwgd${H%*Ed;i( z6>^3NAq;)I_4WO<9hF5?9M%2opc+UKMFE%}+|f$M!q33pU(wr58|EseiS}|N^xPySWw~mM+pm>2s|5x|^ ztB8T$|J~$-m0p-mj@`P&d`nGH-oVdnYmRVI))0B`Z+1tOfsWk>OYyrZ6E5B=Aqbmb zWW{jR-O7%^Sr!HTAMB##Q0~FUQB^EG>h^*^)Y}P$AN(9numgp>!shVI1atPcTKKJ9 z&ZFkhDLb+gho*n8TRsTeZlg0jxA&da{%M?D;Tv!s4tY*WfG5vPfd87A6d(A3xR2*6 z_1gv#G%cB#X?yR#(Em2MjD1dU8kF*?DfoZB^v#Hj0A$X6f%f}f&>$7&(12Er=ks#^ zuXCWA7sUjjm{Q6sY3ct3ZDl2ev@EbQ?=amU@!#Q?%V78r?8Jj$M#ldIT>!>g*dfOp zKf?Q;m~-QSaE@VekNy{Qat9c1$CnU$e*ZOd89%A`#or(4t!IU;)6_d@DYNwW+dj38 zqSvQc*HagV=GTYQ_eD1mvN#3V+|!e|>yuU2t5w%=*;V2f*USKh!7bkNA^_r_?Pa${ zWQ$LW7tV@T8#YTEw|!gBdBeJ$T|CoQd$>!TT8OKkAA>#}ngV z0C82G0xLENC&)mre&{3Q%owEi8kFy&4jiHu-FdliP8D>mj&0rEY$-Wi3%*)|_{U#D z9TrYv7A6CBj)Po5lsv)aS1ac88J_(TeZiL#!Np#w+QDZdM4?B6@;<-mu=uUV2LoIaR!d3 zrI*vCq6ZtGM`$dsS-bM|PBpN^=B`28Ye6OG!$Nb@D`)+S%;TmnPGD`B!%^c|u^mLv zk!^6z@3(yown05#0@U|=TQ7Py?;oy`{q+jGS_=-^7na)>*6$jPSnh06y+;mVd~(Cq z!K|-dwVw95^5tGo2k%m+bIP4|-^FB|L}l5z1fS2O+&wA#@sK-rku1(n(X&r%$;+G6}(iiNIR><{oOuHJN=UV432>e?@JJi97;T(1qn z5xnz-BrKfIA1BK;PwZUu@4Vk_{e$A?{?Tx<6rG-R(VgXFc31!x1(-K@xM?@Wm1oi~ zPT`SE)oJF=Y3AxDxwB8b!a=_yg1(;K@FgVm*N0CF0bsx80Uv{vpFFXqR`=+<{)oDsVcZ$gMF4J{+YnV^(Jfns5PSbwc8i1OTP1T!6 zvUL*Ye=4Jk{w4<;!h^l{L#Uhn`Q2j(Hyx8c8;awT(+*go=sj$`oM|;ZaL}Vr-(!{A zW9>T*TsUSp5jIUz#M(a5*lIUI=?fc1JW{(gTHROSRLsatxxO4Ra;=xr>c_oyz# zTIzC~T+1&4;R)J>%B;&j74@&ba|X0=zDIY>{(W@)_Yq3=^%jq~%Ll~Pg_{*<;Z!?= znix<19~QTRAr)%4cu1sE(8iY_2hVmg6?*1d$8}vY5ArYH$ep}_WCSmZ1${cb(MsWs zvms|Uz_6k$uVFRR_wzCH%dtD57i!x6dPo|klW+HvWijrdH06psT2fn8t75_XV!ds# zxy*|Tho%c-O^3y<&WQ3E67za?vl^OG$?!KL??H#I$+pctk>3DviYo>icCjCy5S_i@yHrM-jOuJ-Ex>)v)<*zA( zP=NhK<1m@pI+Y=Fn6K?T`$qHZ2<&k{RBxJ$*%3|lx$Z=bJg>#pKpQbhFX#6&n=6ps zwBM=j*?L9|vi2NA$0m9UX=RZHhE8>kaD=&lCJ!8k>GjucH#pzvr_fP=1uaqsW&h^R z;A_3uTQzPyG>+DqI`|o~?4vqz^#nz5dUZOE9$_xqA$uX(az3|XHampP_Jb*s-nNNX zs6p0>j7#B$EZ@1A`7MTZw3!t9^0Z!=^5T*(m6jkzD#ctg1*5R4G8fP$m0fg!(#%p^ z+4zw=)3JL;0<1W?XokwnsyH{b+Qh26%X6m2!}8{+F<~rY-pO7pKH@LObx)ujr*dc+{JV zNjjPtumbrmRF#)G)Y1*a##Fn{ys9NUWt+l%m)vcq=>3dbw%>R0I=|udbU?!ebJ6KT zgTa#t8e|@s&*&_QU1Q1oEv>XTNq2mR>(SqB(pv1L;ov`B;vnvsJbq<5NK4=X59>of zt=`6W@FUzbG!4CsJ&f(31F5JYQPt{`WJ)Ed-2H|J4$IPbn{!XVLtk!#seQ_#Y$6 z_~b6RtKBdYO%@!FC-zaoKZGcG3(mm?hI<*4x8cRmB?6IE1IsN7%YF(qR(mndcs|*c?1v7`$W+&H7Mo`eR=}cvA%;Xl z1BU5;EE}GCnx~YuBAGY2sBLViPblV<5kX@py#z|l^BQUU z(U6q1vTx-bTQpJ1-|)YM4=n^$LL4cg`zkt714_=Cs--QYZZ7sPtC&9?=av1er96Em zOVehdCV)DiqkJmD=ex*~gxTj{?wr>TC=p0k$0Fz1OCJo7O@|OLlazVRi9q@#dstr~ z?Al!0-|cHM<1&pEP!Oz`>g!dSw=s-6dbQ*PG8MOzeP4;g>TTt14LKHY_NtJU2}H|! zddoVMD>w$Dod6y8HRE%P;()i`8*YMhU8LHIv{LwgW(u9{Z1xX6Tcu$Oqy>qYk4kWd z20R4KebZ3Div9gmM2XAlZ*T4vaJ z3bJpygRLd0{wv;HAU5l!p!U8-Fhx}+3ZtE7#pcKl!Nz=AQvKqL>*yf*s4=4nSm|Q> zjYVDtJfQ^jgjPl~_$kzozPke*_PZreAW%9p<$m#uW5f=yoERAw1-cGd$EjKVmsoZw~F{|qFFuoobW+wO8Mnw1h@6p zeXAeVcW7PIO5&ERk=2fKIAF7GfI#ha_>45WP-PE+S5yTBNRiOB!K&OJ6?KG;W zZr`rzQv?=XxV2YZWsC#&-ju2iA=c>A=!^fFsMQ#3ulIrL*t=J(TwIH5Y8?I`c17DM zv%5j-TakCdWZiQ89R|y`2V(g)BJh@tC!HqgC!?~E{cM zr(vgdqH^zeOa7a*qiOk2CD|5uo&x4xp>oerA<`Ltrq%eU_?Wgg=W+%&Jz6kty`TS> z^^V@0Q!4-T**yF@I9|f0R1i)tlc-XXEH$^;auFzVbK1OrTrFD-#ctIg2Y6CT16H_u zT}+47YA@as8veAa)uhy$;azAi5XiTtJD$tcb1O>Zv7xd}e8OE#_>+yZJ0dSO-5go1 zwq1iJlyJN=49a~K_U7>0zW%0Pv1R>H1RPQ_imV;$NFd%;w~Eibe~{Kvk(poDmXkt- zAM(wKVA8ED!?>#`5qpyB|NG@(O^<}K_~+Rq)3ny3Hcz^1Mo3GHxpTLmHn8=WEPX+~ zMgFYsng(&Jx|)CB5)7^m&^PY}!+dx164k%EYqPYQIB*G!3gBfwwRGVOE2;ve0xAa{ z`5?NLMru1a^Y(!4l=e&(0VWW{K9{Oz_jeN0*V2HUiA=TDB}5%euNtVn6$q&U&ibng zw-&vBk8Qd5Hs&Z0tM1pBW>~Fuyl6FNg0wth|3?G63A*zSDO~~a`^j1`h&p)~{#iZ1 zjCWxaUJ3Zzry1I0+7G3CAO}$m=fKU!uq)6IPe>HLATcB>zyNdqf9H5X;JnU6 zu|_9%b+`NbP`kw|N$W-ejYJ@k;Of}<*ZmUUA_ z=EavQXpq6oq=<;6Wyh1Waa6knfj&D=gbm3hYGT5i;PkA_d?t}ybo`EPLn3SjGS4eF z2LD`O+>&2vZEXHbJh756X@&e*vVntMY1e!1FdO&nWZ9xyM`RvjLJd#`lWI#cwlOAY z4dVJe1O&d3&EMQ?(}2`Y(;d{(J<9i9U>dxHPh@*847)}JgZGA35&9`~LnRUV zW1`;{IFc$+gSxW%TQ9vYyW?L{;(d)U48uG+dNwkI1w=NE_@qXr#5ky+RMYUd`AoeA z%5`^5=W(b>()|H_z5ezY7b@TJL{NI-?T&Y>*9yrKv>xx)9o_K}zegWa@p)`jPf+dI z3a(LFNURMX`Q~b?DO7xW+jsZRw2!kzx)xia$%AYN8~yE)b?u6Zw0V!G7xSINJ7^Px zHv>s&)69LjlkY6c;8z9pUcFSqbd8Yqf*(um^>pK1F% zMUaHD4!zbWpK;HR(PLS4elzbe!xcA{Ky{~8QOH+}?XiD~&rCFCMtTBl|HI_k#*^)~ z)_R?fn!a^LSJ8NpkBs9#8w^+c-`;i5%D*bA+YD_e4<0NGu)Yp29m z3q$GE^r$6x35Z|6>M(`|+z$}%8+P9!s1JLRt<=EIb*_u-@GiIu8U;I2IW9um_z{~t zfA;7}RdTBtceWQ|i+p1Gay!T+ez{vbQ%sX#>R$c0%bKCkn)G7g*wFsAS~W&8Dv`6d zmCT>WO@_tzTD8^pYnSKD<4Kdr0~YEl=kF>%WxnhL7TkY(i2P{j$9y!qyRgT*ptljl z1RSqxS#V%laOD<9?(<*;QV)iwUTf$UKh zqnQ&Nh8WuI-Y;KJHy%-{@3XBUc##p)D?VouThDclTX-G7Cuw99oSdIKS8du4uaf!K zz=I>bd5LB_+|$fzc9yfrr#3O z;zuPNHOw=|V^6hfzw;@0=ZCX7Av$K=j1#oeiQ&(Q+3)FP8JO&R35)8b32kCfn2!jq zeIcKYnGoP_9U*m>U<7{#2YY4ogMO<2ou=74tNZMdvl%roe%NyLo6>Tw1TxOJBhu`& z&=sw@7M7Jy@L7=KY1KcL2y-<{x|D1J^hs|qyR)6l0}zuvnBnY4jL4tWzds)FQ|L|C z5jYh#718FQ-OP z$ARZQ3>(noxb4Xrs99&5kC_Rgs=lTptkMa}f-6WJ#U!!DNmn#Ipf2l?n;lOJ(`kCD zfhg|YIX0Or8jKXKt ze`83RHU7oZt6;q;g(QdrO{(l#aRrMLk*?`DB-Z2s>yY`FE1e_E&hcYk9VwN>ldE1S z_F%;=*K`vSdE5H&iK?px)ax09R=RD&artUx&xm`2%R@}N1I0W%A(itXNUZe9r*=cZ z-_?-Oq6P1yJ)un+@NPr4dsJ9JZmIM^gz;fn{U+kB^@qxPEO(czq4?>;qnSyMe?TTD zra?sMLfgpBa_2pvUMUjyK9)M>E-Evk-_j(fl=`vn%zdU%wV1$h4z+9of9EDODySiw z^giQpoeCj)IWyN6u(m!ra;E7cu1K10q6(@6e-wW={Sn)z%OantVf!87fytWnX(b#g zecpAb{9elEB1dAdv@KUwmG@iOA&avuNyeIjO)xDv#F5AM^4`c<`q9VLA&sc=)q9j_ z4etAu@7Y#6gypIWhkmjs0P_8mBu0balxJA{o2Wu?-Rbm}A-UwyiTq zA{swz3BU)EPad{|B_W=&=d~LQ*JI=xn!fnP+Q_6U!z>Kz4vAX%TkF|cj;jsLqGE>%#TEj;n=QN!8FkVb`W)c%O@R& z8l+zMR0-`0JJg&Kfw^z{xqnQ5yehg{I~{84+|X1+^yyaxAFg)4K0bwXZ|nVRrmk!H zb5_cprgH!2FOC!*7ChBI$+>G&CD}e2UcA@WdKU3H@-<3S1#4KSqy6E~h}f(+f8#)Y z{KV&@0iit4a!_gh6W)99j<+r{aJE(`)^Q7$7SETQLfOptu?31(4e%CK&36<}uJ5u$ ze2RNyyNjyEd=9XS4T<}|$0Wsjxy|7F(}GmKIi8Ag{uAYxgvj|xTj(WI_sJ%T=%p@q z{Y+>Q^TJkzCPDpj19DAt+y&+(7|64?Ab%LmJ(oG`Fo;y ziD<(5N#uPl0^@w|lrb%;ik#6T9v{@>tiPe0@9R9v*W&{JSZSE9@qwr#f|jBr2c|}^e4u9G zZD>uC_woj^@P3`fCvU1>iy71psKwMK3EJpY@~NiUe6<%djHe09+P@Bg#c4Dd}K_%;+eUhLC!TC1KKgdcD&aZw(bVI6DsH?L>&&iCi;@; z@9=?UWBpC1OPj*vjJMvU8TM`B!_D%}Gx`37%WdD3sEPQ+hcAa57(DKaS8ZyX(>0L= z(}fyE7`4s}|EuP`J=mo_|KD7I2{%HJc`@!!S`%^Dcxv4rZyn5rF+qh*^K(XR*;Cw} z>waqh8#I>mM_kUWX{gwo0ng-WQ0Ayu(;`V95Wb!9C{3s%Rsi3r9!vC0lB48%);@Ij z4!i~1&&u%MtnHay9yvk5TPvfJCBlUDicdyQZwWi4t3vR=50=y$H zA1PfiCHpk;p+LLpNy>~t`eAn~nITCzob2c8=UR)!eQB&F9X7A{#3@teK^v-)bBdAc zxm@b%cq5>&M;BL}bgn#|ED`bfwBuiV!6e`(odd(AEUDgcwum8ox`*jRC*Hkxxc3VW z%ILWpdJrq2=In3AG*sFafS9VNFW@NE!1k4QF-i?l2oy@kJmas7wWlbdqXm>ue9Oil zlS{6}z#$Dqgc_vT?LMFCl_I{TPGyZcHa_8U_UKI$&t9M}33aGR7>jrBgmVsfKZ+|CC@(B&DERG@ zHQ!CQIH&Yy#YiGcf#A!a_9a2}sNCG4%hukvE(Tu{q+^%|%k}Dgei0tqL{l8{kJ)>2K--dpc5mtQj}6r`8(nMr&Jy){jA@&IF6>DWi%<>gy{kP;J_U>E?lN;k67I$Bi%D%_;WfC9Q1@pW|jSjp7V10J)LW#bQ$^+6l=&l68AYW zpl;>{8df`%jOaVvbWye{gCvq ze!Hfyw56eaDDx)2Vz-OQ+~KUU3iM=~!oSTwqReqE!&6Jb!q+I6%HKN2QP)HatROAt zUlk-n%WAz+RN2o}4@oOa*)HFsyc;q0>?8L(joEq~j7z#QHtVp+mO)iW=|o%Z^1#wt zWt!}TS`KY=jpf}0$oau!cp8c+dxCV2wqSh$;_8$``5dD%#uqfmj%(}NurVSac5RO~ zJIEp3198MZ3nZ3l1w5@MZ^pJGuH0Bjq~eeic=0KR6j6e*fnxcURsqOa5PNWZ6!XZ>g(-E$$IrP*oSuvLs3FIBN3-SZ(v zXK7BI43nTKmuk=3Dn65W%ootU0nT%6T?Rh+-Cx_lVex-u57*0eKJbCyvUNxNxe>9I zqeO8Zl(FpjZO@57=7&Xl*O!lOkc>On3jhC51U!;rToM{5QTSTc=c1)(Xg=F(1Lh6# zYQ$jOmyS43XCjKkS(JtCU9Y(5>yb07*E2hzCVsCbO|$U|U5cs#)wZH#&wl}F32uJV zJb~{dTAdz%Yz32Z^AAe=wx;J#`+et^8iBY8f5Y#b1mUpU%2c9`*X1;OvNFl3Q|ve( zCNURQ@azfCduZJw?TMz)jE>7;4SwF0F!bGIdq8%Cmg&#uv)z$WAZpj2a}dlk7jw^# zsr-vhw>8Ar07^<%()9H++t&n_HY86Ak2krbsP(Ma$MLLIR@}?J@0;Ijr);;` z`P*JPIdPc@P$kM0XUyhU>1od(i3?mt1?~o-Vde}j$*{4{Y{z3ihNlN=#B8RNRQT_|$QM#R4t)cxX{u{_s1NonDfL1_cn;`Kllk1uF0>f z5*~5Xf(gVH%;jVv+B_pH{E0)rrV<03`-n6P_VX?8ACqXr6TYqP+8)M5=`hpaBcGMI zH1|iy9%SeF-v?9% zgg1gy@{99c#sX*1=ZN;L2lizxUpMZ0sM<2v*GX8z_Qa zum5)0?Q~9qT=G3br+X<%p#5!GHeBTQT*)j4=N{G7ikHKQnFc&^_)PLX2~BAKyXl@-*(jy zoU|8$shp3rP!#`7S;(C5Yk~YuVI$ShMC?EnpJTf1f8 z923;5>CYx3_;!=dys_Vag=QVx*M!#lB<)%5`UvHwjpOLD|54#V6Lgq`1|&Ds7riR9 zD{MzmE<>|6m0s|p7v*JE-s`KU-g?BNA;LP4|0UCifUmdi4oZX(dB49b$5?^XEu4jf z5avt!#EPasaIso1oID9!wSlZGIIc$X;vh+W{_J~izlnfDPygs%F11feFaj@c@EsA|POdZKs4CkxeT8~c&RL7oIqynQhWsYpMhdC15jjmT4Qk>$z z@dOFQI+~h+IECWa_p!NDZ8_aut7jCYu^4XA&Y13yuZl^w6^ejwea4{Tmy!UA9RS%S{1gRn2Sk|9PnTg?#jT31wq-P*P^da#C1^Z@7*=rk# zHT!MHp-+9uGf+BH9D8V!b?ii9+2hXIb9f>}y>bzdon}i-&Ii-BdnHPAO6G>BFHb#|4ig8La2NvST#MW)pcfg}x#g+DrJ2CWP^t?e%}!#M$0R&y1J4 zk214g((lMr6}BJu4vJj^9rGt&u=eats9?`GR=N6W-vYZ3OmP07-VFb9cXT2p(0?tRnK{3Fk; zQi<+Ukz08*e@h*k);?k^@!i^1r755B6RZz@XHy`wA?Wv^-IgJ2+8c``JLADEozTZ{ z8=JB}#%0?SLNk21W9N&HNhNbljH^o4 z%$WM`$)|h0-ysc2lm*|vP1HbWGhI8cVU~a+3Go-NiAlt)q zK)DJnr~B-f)hWio!Y)=18;ckTPchi3hruE{`vgPK+;2wu3UrqwyGdpCGQUv8hZksA zSUo}xF<;C-PA5mK=Jgh&HWcDdzRae0ZVBXO%>2$1)!2Pad%aEjMY-aqwiNEEe-(PK zsf3KTKqUz?Gbr>6!GtkmWC2C*{iU+^>b8NkCS*G+Q_E2Q!+?}G5B)&$M5{i9vG4rK zkrTI1jIeuvXX?0FVOI8*h;?c+RMe&OxOpcq%x#o|z9aks0{LQK3MN$HanwqQ)?t%R|-(4dRLt8Ezg*MBo0{2-H&0FZ$S!~Ktt>IXoDUd`Q zw|d#u=zdA+Z=G%PT{(P)(~bo zRk0wxqSeaLl79axx;?p3W1bvfc0eLm9Dh=z!?NLuMFHJ_+DaZJ<%0P=z zQtAvfSD#M5ma`~>w$B81O1AK{&G-gat5>O*MV$`5ZF%4|t}9l%L@s00K|R+m3(r&W zcp93|Owu@>qtbY!loFhUKKvSonSk7a)Zr{Nx%m5N`=?__S-YD$dUjY=wlI`vI%i0% z_=t)$$?Mf-kLCb{#rHWJW~V*ys)~;y;JpjNK$9v zkF9dt>b309r&Gb1L#frVPe8a1^0CgTe7fKk6d*%GvHx33yy}gQCNk1?02Z98wScB# z#5OS*#*l7(ij(!{0>N`0$J>fdWYiT7r;>jmIL%!P#T?t+s%@i$o0QwKtZ_UWtV)$x zHpo%O)0w_{{u~=tKs4($4erF0E^8>ojlVuyl@<1{nyigt?DKKrm~3-Hn+`!+=vuYt1NTRev9lkm6xJ&`^NFb*$qu6RBOp( zto&HvA4VBkypFkbD@y+=sow{!Y6o_50V`7r?qo7)1`#H|qa;rfII4ja<-w_zDQe)5 zC}v6>Ad7fH)HPt4P6P6^CE{meC*ek7WQ7A)n?McJ%A?Xh_M7F#X}UG32BsO zsXQ*D<{SDnRX%&f4M@pMY%kAp9AjU|@Kv47n7>GVlb2GBsZT>p&0*xbxA(L1(Bb6a zsx3mF$mQdmECl8}rmE!v3?koc@-_acs1Qu8-O5whKdP zUv=iEJ%?B7C3c*La!P08|Ef*D6<9*>`VxFg%Rmaa2GT44NS%l)<&$!e>4%u_x&H4% z4W{VXOWU7IjFIlbOZ6Zj=OT?CCsvPhh>(fZW@z6G_8!cNh-Uo6aE&pJnK2Yo5}5OnIIf5>DL=> zyjiFuwF5`ur=YXqH+}EF&Rz*K#N3U0*;sPh5?0Jzpdmn0jvM0NBsMKS5;uuF?28(( zw0>eXDrIA*SDE3M83g3n$8mpAeHng~T-%gazt_X9;WvYEwlfK*H$Iz|2294p*6zVN zClU~~lk1SmEqbCqp`t2PS_LHe5A#@?J3d5Hl8?9H@pnIGI%@!~heR9S-Ay%!8&-27 ze@L(KGp2O(AyIP>eRL5&Nch13QAhlcR58irB3K(GoC6|5D4I3w`XoBkF#68Ahe#hu8gn3}7@2&a?U zn4?^ys=1g0o)g}XUY^Uod z47!2vWWGVpLo+fD$&RHjFyV?mM@4?pNcF1tmwbv*vWX5uT9OX~N_VOW_+B14!EYYg(;*7B1SLjpN%Hz42a|;38{hNgSUvFMX%nclg){ z#oX=maC581OJjcf|VEa2T9#{)ebV{sX_MCnL&DRLI&f8mp2I$nh)Iap12`oT6630#V?P%zq;BaKL-SvI{)4~uIV zWDgCws-CGbs@h)y=D9D+I&eL z5x3$UjDKG((H2pdq+@O_c7%D^jR}FkAETS0fF-T_0JR8yJRVXfo_3gO75nV6 zTp$xjLh8FqZK4w?6Mbps3^O^};0#`1BH&@+uY4bwu=WezNUqHgTXAmiGCwq9tY0}% z^wIa{RH06WM5n@8r$6sB0I8#1xSVJ{NzxrI{8hlPbKPZw7AQr(|2aeT9W`%@JDZcg z;pWhKT01Ailb1ybJAPeKF7ntgg9j+xUHO+cS7$Q3$B{~LG|2{UUf3n{4uMYwpKLO) z^wW7CP1!!Wk`M1h{k{G9M-1TStcWA5r!h#>b2eFoKoEO%_makRO*?{_fID&wk!vm# z9)dU?-`TyTrVc+T*dcH)to|-&r%V8{ z+gQq16Wd|TV#}NUJMB@xuRA0Yl6VU)9BNY=JTqe}W)#Blj*0YoIfrAP6ffe5sL&;9 z;|hy{Rx?F2(!FMfn(5hsAU#h3tk4qg>k*CDahgT`g0ioB)o+2h z71CIp0aqtk_@%V4)Rfgf9?3N!XxQS)=b;V+65I^rprWu9Z9H3Z<6Oo(D}zTe2ZMU@ zmdRAFGwd2S%0%*TXd4(z>HvJ2bB4;_xXXH>pPE* zYu10)+~uluHO=u}gpnVSRe}Izo;Q39;9SFH&DQkSH|jUQLhU{AkFBeNFLHs4vS%*V zlw{P{Jbu7-2WCf^Z*u=8NK5e|*SVIA#wc!dBIVZB-};*Sc26HC{jKg)4TWt68v;8U zOtk-?@d<&VStl}%p13NRi#r`;vmC>MC&M`2_&4{ak6(OP_4#b3f9>6~a%sGw|Fgw~ zUo={3DkJBvZ0GpmWAJp*Y{8B_J;sb~56YxLsxr2#*38-7E!Vr)UGd4|6U9yfZigzv z&xm^<9rjP{>t4qMj?)Cd|1Uy?2OVq(L+iN}F1naNP@67xyQ7C5`S z$UU&{sbB}hsMDuk`PjNFNN>^KS95k>ip!@Lgo>i6L;V zUhROa;PgFi{J`LR5jZ8ek_Bqir%hJD{DLoLCY*9LR|Xc&=}bKb-kO0_UCi_TVUaIx zE9KtrbmI8L=Phe`T0XC{Q4@XujH7iYyzeQ0GV13^shi2ZHbxq#v5r$w-t)TB1!cy) z%Ke?72zuACw$^sChrcb{*v#P`4JWH_NE=fqLVaeML40PB2vgkv{ zD|drd6NmuELv7SkQdQ=ZKQ)}ma2yy%u5q8_CQh$RQTTk?CgbTXU{d*f+KZ#|NVySH z`QF#D%)SCMI2nZ#qP}PtZIA(apzhBmIbHSW-!I>R3^cJ&yzlQctDF~k=QIb?X(iz1 zW}T*;C|k7^ICL6;`@Mx8JiP|l8xG%=tpnU?eOhV8?`HTCZ;*lmLck@Y`iyaTqlUwG zuu~8$>#fee0iKh?209mD_=ms3lXP?6&o@+momh*sryrc+bUF_FXQ*lzvaXuhr_{cm3R9r5Scc7TQzTn&bgAS7eLWkwJ(p~|iJoXD>D z;FI+X2O5?LoG-cls{CGc%uv|r7Nhk$fYn>7He&Q6Dp>*v6T4KK`AK_8+}=husp}Er zQ*Xe7N&mXDC_PblFY>_~@9%KHP23sp-#e;Xv#u`LjsO0MUNZCv9ZPj#&gHB(uUo$F zzc2dCs|mZmI^cc0BZdZj!5Us;W_Q@|<;{EC1gL+8{C9xQRGK}6Q`Q!+$mGyEi#-7v zkZrwGZ)BIX#PUxf0O0?;KRuC>2%6duY{Gn6PQdX2!|QUp^5JP`6_NY*wo`e&Y|2(4 zozEqqh~Rn2OV*qx1I1J*xw@u{FUJ&%k<#8O)m3rV8tUneBiG`5^#`97W57z{ z*Wo;;uIpDp;)^Fn^B&RN)o%tG9s4Gh&+qJ{QSF=_BL;1V+5X;K$Bw6q=0;UJ5Ddyb zZu*@H#Z|6+y=j^FX|glu`+m*tczt(4DaDv<+F$*r<0d{ zcLeiomgNtpKLe($Po8eHd5k+=^eRO^*berV1~&Rrf`TTVJ$p8MbtG;v7@J*Zw#la7 zW)TrhD|AN`)~?nT>gCapD}x_Gm6IJ{9-z>1gy- z3P$tcQnR*YyVp78e4~R8^p7sNNu07*z4`OJ)#ftz4y=lezxC?Z!G;^{(qc82Qx2L0f%-R|?*qMSjNRXbuMk=Eu^%)ZEp8n)yFxY) zD*AO6Wnq3pl50L_0y%sx1;;-Yzht=u;I<4N9)gDccxF_g`N71r-WgV$Z>gpH{+)Mx zNa(tafUUIOBM#?X>pWJa()n37%jX4K&|xnG?MmAG&vmOX&>+VTm|hbXZ)d6uc%}bN zDqVBos2KHXgFJU@$f!36yvH7%-pNrjnoO+vp4dwn#f-fGyky{qB)!woQStI>PD)7` zDjrTPE-6uDko2zTIhkFm`L0H^(zKTdTAFqI2_DA9J4c*@DS!qG^>APv}Li8c^AtjPgmqC?Y5spLHVpqeZ%d*QImINpSe7d>w8}HkO*7wvES z1HHM7TGR&@8|-G2m$Ic?6^*fOD{(PEV#WpLp{u?o^c2?HtQMvd8?1NBVARdJ4MFKn znH&kP7wodKQ?<*n^c!1&-wq4xeA{?6AF50`nFXy!ZGZBnshte}0LV(}-Oo9lEVXkQ zG}^6t;58PcGRm1lZ^WO8De5HG1y`^|xEdnFZ zjEkWYQPI{;%);-ZdFvqrT;(-x8*dofpO2@ncq3fG#l_&!)kPd9ne!7orE7eW$Z6Sk ze#B98oD|Y%CoT#6xo~n~T}>%eV`0EJ7`#rcd#36wCCd&H0j1 zgLjnExl)RhddpD8x;%$0w8go+T;>k+%yTxL&16xS7^&0O?S4VJsZ(z^D&XP*-kvh< zc|_w|r|sd2`FXLyuS$NLoSey;MPaY(zjH%|CZ8<0^n7z%A){G*w?!Jc48kdxVqm=+ z_rs-U17_06&s=DfkQO+?QH`g$$UbNe;z|c zcJyGr*-9PwvYvf)n-*Kq-gi2_0eU-71~E4`FOvL1eui_7-+UU~fQxx>x;e-}RWa^c zY6OeAv~hQDBJu~i*(3qtISGoAW2Q$%s`rJZ7FGtehR!%C^tXg5d5M1FW9m+qt_q543 zR=AlcNqCTQWG5jXJ2LE*pM62+n#@1gA=AqK#dE}9rtjO*P}~!f^p&~PAoe_z7-Ak^ znO!eoFa0rhvc0I8DCE42wHmeMmjE_!_Ks)e>KMaKj@Rq%qAWJx%E)4@P4UX0(ebxv zpF&Oradh$w1YDo(vh@8(7F>}&;yPtyzib*alrFAukA?>K%{M&wnN`!VXq+PKUNPe^ zy*ojBRm>HWjp>ljK>s0+xK43y9W6W)xq+$_zh5LDK(S-Ij~oiWiheEv-Z6}d#@bVG z8Q@y)vmAMYvzK-f@#yOf$y#8Dtx%6+8J&Zsd@fWhwO!S;-tT7a&&s0D#)c)kC`;TW zdYZ^p!Pr<}c#t~xN37*kV4@Ej6bkq)RA+lhTPd=Mj18gZn5SmRCKc{D&jR_gKpp8eBUVKcJM~%O=p{>B9LCTPX1BBp!_prHKj|4V z90hqA$$_2AYKJn?`sT%yX##z&j&-`11OCX+_E@a8T08CD@IxN&+`KM!<0S|ZYf2i0 zp)vH?Ne%1baTl-B8uR%C zR?-DaHFD!;t4+!YWqj^V-CC-tyc-*ec8CV{=Nk{n1M0I{7lgzwJC)D9iD{Z&}vh2pCrG>5TC*YEu zBnr!~5U16S=kVs2zw;%8XL6Dl>o|aV`3J)0efz-=pE&Irn|+QKJEcLLH%o1nQ6<*V z14FnrLnr$Ub{yyy(G^f;S6WP{AL=~c`{7`SJng`%^O+eCe7?!%#{=0N$uN%(9-tu! zHK>_(yKZZY9>~R&pq9#GXEL6v$8b+f%@p1%`YCy5;EkBB-e1`Hhi?Eo{PQZn{TC2C z(|4ugQD>$?zZ{Q)?k_Z7zM&l!-oExp6PPv_Eo)(hO<930)F8w`e5JQQ;9^kwvA8k* zA}Q#tlBi$F?Q`*}qkuna`Q8dLJi1j})1o3@1bSQM=H`m*2=?YZhT-tf1dCEF0+KFad(4i8`<49mmz5TG*5|7E9FUy1$^Z z2n$EILutX=jBp8~rx_IbjeE=DGeBiIv4T&bgL++g2AVl>sh8MfQ$l|RR>Qx(svc5m*0zk||lS^Ou*%K=PI{*P}eU+(nYjTL(u z;?C#7d)gisSN}3o^(;Iy3P**kwp(jJN6jB|<~Hy49?TyFKL#Cw=B!6ch=D(tVA&0R zryHzdSm$n)PUG#qdep1CsPv-o43h)i=w^ApqGijmb4RdeXg(8MDHFv;M^6H%0dv~o zoMXIl;BO;0eEI2fI8^UZDE{UK?3HJ~y={6cB9X)f{ssz_#a(E!Nkks`^)q^2gx8QV z$aTGj_26e(P4y&nzYeik>F`rp&R_xpErDoXGBoTpMQQqq%+aR!r%|^8Wi_%jTU-<} z1>C-K)F<_0DKdDglATG=COzfo!U#DQsX=Cc_%%PVSp3=H6OCsjkDWpn-Z-b?`4&x0 z4|ASBlUPr(^D^#eyFU_P1t7ZFdLl57j2i8mr?D;Z`g8ix7V_3iZFqrm&9BI(NyXw>i#%D`1sQ!HbOefvsaM1%5=+kwcpB~d@`>*MTS>3uH*O?IlY zP3uVb8`BI(2ra@e1Dj!RBP~=DleS-%wm+?Sf{}4qkVjiTg(ML-aCw9bjZGlM_tK5%2_e^of0l-`xfNk@0u)&<68AQ0D!N;&5#<-#pX)p$NZDN{e2@u!kw> zre!l5GlG0yVihy)v1zZb{eeOeLK%tRMML&*e?5IYV8FvuD+fC)Q(KHXFA>X)`%>?;YPXVF<)cw=ddNrPz$LGq4> zp8yzDaZGzkyJdHe0xfZ~Aog4wEVHi3j_;*q+6RMl*QT6_zbRBRqT7QdH6@ysR0m=wYbV=E~7rYDvT1Nb2way;*=43pnvirD$H{dGH-Jun{e z2jA;|(KFYxV`8Y70w#>0U!C!f>iQo0$kzM}b&C*fy5bMtaM*R+WuUnrNZPn56Jwxm z(XGj`U#vQlUCpbEHX6W#6mjnw(igmFMHXYM3k(Co@LDf?=Yla>GmlEjFn$>QK(NB! znv=!uSFbVEsIFaIrWR|=3im6Qa$D(ea3WuAG8A}iAI|fcxZ6n#aM&reW#^(BNOPi3 ze6RRE(~jNjBJ(FM;P05&_6RwK$L0QlSd4~&`|$$z-=n{Gor_Ia=h>1pM($q5#%Fo) z!n8qoF&BjAiGJImAZX_2noWqlVdg|AC%K-vrXpk9|&V+ zeHEx(X+9WR&Yqjd&sOTNKwyROrdP8otuMqflyHptqp@byP+Vw&_sb??2CFi+fQ*>f3k)`dtjDRU$BX7 z#G$-!GzSaWq8N4C1+Z^xX`qDW!h90Vn)=%XLt3fTuu*JQ!T>KWV)xlRfEgl0+kuTV zlP;4L9+Td!Wvq8os-8}}@c4sAS^f3G8}E%QaS!7~c%S(pf7#Q+xyBITX0W>ek!Zhc zNwhqLc2ea{&*JjeL~=0aH@dM;R1Rz-!a9_g6ym<`L8O)ve0%yB%uMbt>=7aLTyS79 zP-=U1xJ_=xp3S}@#!PT6FR(Uvo*~rnZxDJ0!&afl2+cmBiZ{am8X_U)xf)X>^#R_c z#Se>$aiXpb6@$4Ez1$I_FG8W1w8ONyF#dEl`!JyGh{y~F3~%cdhJIcRUrL(Ca0>6N zf0r%Un=!1eZEq%6T%we)dFG-d?lvkOx|_(XH2$VYNNl5)69wOX^hm^@;-IKmbpO!M zA5s>J-SPE(_dXkOAC#HO#A1NXt<3R=N}_m*`T+H2jF;nykdG|xqXvs-! zVYjvVoY5rmPd!>IJ7HeG=uKmk(rYF3S>U~G)*9x$Rh5-C?%c<>Pbjbu|MhVUuYxsK zP3ON)=*w~XQ&4mVD|`N98ar5o_9qK@aT{_~;nE@~`L=gb);RVB%Qd&?^2|eQu4Xv{ z9MSy+Tc??Y$m=cDq^1&Asoq&7SB{H76xHkUHXft5q0a?k9lO%@_b#7(ehr3-V@n?5 zrv}r%3$Ss-_j!3QV74pP*KqoJv3A$&auei0&krg3kRr-d6sIT7O)y4=^D10P�DG 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 diff --git a/docs/screenshot.png b/docs/screenshot.png deleted file mode 100644 index aa6be62d791a2316012831c3af9cf3e5309541ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77780 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 diff --git a/docs/settings.png b/docs/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..4c29db0b57966ed97a4ba86a48045192c317fc5d GIT binary patch literal 24947 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 literal 0 HcmV?d00001 diff --git a/src-go/server/cmd/main.go b/src-go/server/cmd/main.go index 9879f94..ff6174f 100644 --- a/src-go/server/cmd/main.go +++ b/src-go/server/cmd/main.go @@ -3,22 +3,45 @@ package main import "C" import ( + "encoding/json" "flag" "fmt" "log" + "server/internal" + "server/internal/tls" + "server" ) func main() { - addr := flag.String("a", server.DefaultAddress, "Address to listen on ([ip:]port)") + spoofAddr := flag.String("spoof", server.DefaultSpoofProxyAddress, "Spoof proxy address to listen on ([ip:]port)") flag.Parse() - log.Fatalln(server.StartServer(*addr)) + + defaultConfig, err := json.Marshal(internal.TransportConfig{ + InterceptProxyAddr: server.DefaultInterceptProxyAddress, + BurpAddr: server.DefaultBurpProxyAddress, + Fingerprint: tls.DefaultFingerprint, + UseInterceptedFingerprint: false, + HttpTimeout: int(internal.DefaultHttpTimeout.Seconds()), + HttpKeepAliveInterval: int(internal.DefaultHttpKeepAlive.Seconds()), + IdleConnTimeout: int(internal.DefaultIdleConnTimeout.Seconds()), + TLSHandshakeTimeout: int(internal.DefaultTLSHandshakeTimeout.Seconds()), + }) + if err != nil { + log.Fatalln(err) + } + + if err := server.SaveSettings(string(defaultConfig)); err != nil { + log.Fatalln(err) + } + + log.Fatalln(server.StartServer(*spoofAddr)) } //export StartServer -func StartServer(address *C.char) *C.char { - if err := server.StartServer(C.GoString(address)); err != nil { +func StartServer(spoofAddr *C.char) *C.char { + if err := server.StartServer(C.GoString(spoofAddr)); err != nil { return C.CString(err.Error()) } return C.CString("") @@ -32,6 +55,15 @@ func StopServer() *C.char { return C.CString("") } +//export SaveSettings +func SaveSettings(configJson *C.char) *C.char { + if err := server.SaveSettings(C.GoString(configJson)); err != nil { + return C.CString(err.Error()) + } + + return C.CString("") +} + //export SmokeTest func SmokeTest() { fmt.Println("smoke test success") diff --git a/src-go/server/go.mod b/src-go/server/go.mod index 20c1d71..67c2ed2 100644 --- a/src-go/server/go.mod +++ b/src-go/server/go.mod @@ -4,6 +4,7 @@ go 1.20 require ( github.com/ooni/oohttp v0.6.1 + github.com/open-ch/ja3 v1.0.1 github.com/refraction-networking/utls v1.3.2 ) diff --git a/src-go/server/go.sum b/src-go/server/go.sum index 53c33a3..5b151c7 100644 --- a/src-go/server/go.sum +++ b/src-go/server/go.sum @@ -4,6 +4,8 @@ github.com/gaukas/godicttls v0.0.3 h1:YNDIf0d9adcxOijiLrEzpfZGAkNwLRzPaG6OjU7EIT github.com/gaukas/godicttls v0.0.3/go.mod h1:l6EenT4TLWgTdwslVb4sEMOCf7Bv0JAK67deKr9/NCI= github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= +github.com/open-ch/ja3 v1.0.1 h1:kMqfkgS+cTasMlsQaJ627qlw7kA/qRZVTmF0BtFjOLQ= +github.com/open-ch/ja3 v1.0.1/go.mod h1:lTWgltvZDGQjIa/TjWTzfpCVa/eGP+szng2DWz9mAvk= github.com/refraction-networking/utls v1.3.2 h1:o+AkWB57mkcoW36ET7uJ002CpBWHu0KPxi6vzxvPnv8= github.com/refraction-networking/utls v1.3.2/go.mod h1:fmoaOww2bxzzEpIKOebIsnBvjQpqP7L2vcm/9KUfm/E= github.com/sleeyax/oohttp v0.0.0-20230603105812-6ac0447b1a8e h1:evx5O2TAZdPLDCqPuEI5yo4Sg3LT5cImPVbno6HKM2s= diff --git a/src-go/server/intercept.go b/src-go/server/intercept.go new file mode 100644 index 0000000..3dd43c7 --- /dev/null +++ b/src-go/server/intercept.go @@ -0,0 +1,233 @@ +package server + +import ( + "context" + "encoding/binary" + "encoding/hex" + "errors" + "fmt" + "io" + "log" + "net" + "net/url" + "strings" + "sync" + "syscall" + "time" + + http "github.com/ooni/oohttp" + "github.com/open-ch/ja3" +) + +const ( + tlsClientHelloMsgType = "16" + + maxConnErrors = 5 +) + +type interceptProxy struct { + burpClient *http.Client + burpAddr string + mutex sync.RWMutex + clientHelloData map[string]string + listener net.Listener + ctx context.Context + cancel context.CancelFunc +} + +func newInterceptProxy(interceptAddr, burpAddr string) (*interceptProxy, error) { + proxyURL, err := url.Parse(fmt.Sprintf("http://%s", burpAddr)) + if err != nil { + return nil, err + } + + tr := &http.Transport{ + Proxy: http.ProxyURL(proxyURL), + } + + l, err := net.Listen("tcp", interceptAddr) + if err != nil { + return nil, err + } + + ctx, cancel := context.WithCancel(context.Background()) + + return &interceptProxy{ + burpClient: &http.Client{ + Transport: tr, + }, + burpAddr: burpAddr, + mutex: sync.RWMutex{}, + clientHelloData: map[string]string{}, + listener: l, + ctx: ctx, + cancel: cancel, + }, nil +} + +func (s *interceptProxy) getTLSFingerprint(sni string) string { + s.mutex.RLock() + defer s.mutex.RUnlock() + + return s.clientHelloData[sni] +} + +func (s *interceptProxy) Start() { + var errCounter int + + for { + select { + case <-s.ctx.Done(): + return + default: + if errCounter > maxConnErrors { + return + } + + conn, err := s.listener.Accept() + var netErr net.Error + if errors.As(err, &netErr) && netErr.Timeout() { + errCounter++ + log.Println(err) + time.Sleep(time.Second) + continue + } else if err != nil { + log.Println(err) + return + } + + errCounter = 0 + + go s.handleConn(conn) + } + } +} + +func (s *interceptProxy) Stop() error { + s.cancel() + return s.listener.Close() +} + +func (s *interceptProxy) handleConn(in net.Conn) { + defer in.Close() + + out, err := net.Dial("tcp", s.burpAddr) + if err != nil { + s.writeError(err) + return + } + + defer out.Close() + + inReader := io.TeeReader(in, out) + outReader := io.TeeReader(out, in) + + var wg sync.WaitGroup + + wg.Add(2) + + go func() { + defer wg.Done() + s.readClientHello(inReader) + }() + + go func() { + defer wg.Done() + s.readAll(outReader) + }() + + wg.Wait() +} + +func (s *interceptProxy) readClientHello(inReader io.Reader) { + var readClientHello bool + var length uint16 + var clientHello []byte + var err error + + for { + if readClientHello { + s.readAll(inReader) + return + } + + buf := make([]byte, 1) + if _, err = inReader.Read(buf); err != nil { + s.writeError(err) + return + } + + // catch ClientHello message type + if hex.EncodeToString(buf) != tlsClientHelloMsgType { + continue + } + + clientHello = append(clientHello, buf...) + + // read tls version + buf = make([]byte, 2) + if _, err = inReader.Read(buf); err != nil { + s.writeError(err) + return + } + + clientHello = append(clientHello, buf...) + + // read client hello length + buf = make([]byte, 2) + if _, err = inReader.Read(buf); err != nil { + s.writeError(err) + return + } + + length = binary.BigEndian.Uint16(buf) + clientHello = append(clientHello, buf...) + + // read remaining client hello by length + buf = make([]byte, length) + if _, err = inReader.Read(buf); err != nil { + s.writeError(err) + return + } + + clientHello = append(clientHello, buf...) + + readClientHello = true + + j, err := ja3.ComputeJA3FromSegment(clientHello) + if err != nil { + s.writeError(err) + return + } + + s.mutex.Lock() + s.clientHelloData[j.GetSNI()] = hex.EncodeToString(clientHello) + s.mutex.Unlock() + } +} + +func (s *interceptProxy) readAll(reader io.Reader) { + _, err := io.ReadAll(reader) + if err != nil && !errors.Is(err, io.EOF) && !errors.Is(err, syscall.ECONNRESET) && !errors.Is(err, syscall.EPIPE) { + s.writeError(err) + } +} + +func (s *interceptProxy) writeError(err error) { + if errors.Is(err, io.EOF) { + return + } + + log.Println(err) + + reqErr := strings.NewReader(fmt.Sprintf("Awesome TLS intercept proxy error: %s", err.Error())) + req, err := http.NewRequest("POST", "http://awesome-tls-error", reqErr) + if err != nil { + log.Println(err) + } + + _, err = s.burpClient.Do(req) + if err != nil { + log.Println(err) + } +} diff --git a/src-go/server/internal/tls/clienthello.go b/src-go/server/internal/tls/clienthello.go index cb87394..9591a16 100644 --- a/src-go/server/internal/tls/clienthello.go +++ b/src-go/server/internal/tls/clienthello.go @@ -10,7 +10,7 @@ import ( type HexClientHello string -func (hexClientHello HexClientHello) ToClientHelloId() (*utls.ClientHelloSpec, error) { +func (hexClientHello HexClientHello) ToClientHelloSpec() (*utls.ClientHelloSpec, error) { if hexClientHello == "" { return nil, errors.New("empty client hello") } diff --git a/src-go/server/internal/tls/dialer.go b/src-go/server/internal/tls/dialer.go deleted file mode 100644 index 5578da1..0000000 --- a/src-go/server/internal/tls/dialer.go +++ /dev/null @@ -1,66 +0,0 @@ -package tls - -import ( - "context" - "crypto/tls" - "fmt" - "log" - "net" - "time" - - utls "github.com/refraction-networking/utls" -) - -// DefaultNetDialer is the default [net.Dialer]. -var DefaultNetDialer = &net.Dialer{ - Timeout: 30 * time.Second, - KeepAlive: 30 * time.Second, -} - -// Dialer is a dialer that uses UTLS. -type Dialer struct { - // Config is the OPTIONAL Config. In case it's not nil, we will - // pass this config to [Factory] rather than a default one. - Config *tls.Config - - // UTLS parrot to use. - ClientHelloID *utls.ClientHelloID - - // beforeHandshakeFunc is a function called before the - // TLS handshake, which is only useful for testing. - beforeHandshakeFunc func() -} - -// DialTLSContext dials a TLS connection using UTLS. -func (d *Dialer) DialTLSContext(ctx context.Context, network string, addr string) (net.Conn, error) { - conn, err := DefaultNetDialer.DialContext(ctx, network, addr) - if err != nil { - return nil, err - } - - sni, _, err := net.SplitHostPort(addr) - if err != nil { - panic(fmt.Sprintf("%s: %e", "net.SplitHostPort failed", err)) // cannot fail after successful dial - } - - config := &tls.Config{ServerName: sni} - if d.Config != nil { - config = d.Config // as documented - } - - if d.beforeHandshakeFunc != nil { - d.beforeHandshakeFunc() // useful for testing - } - - adapter := (&FactoryWithClientHelloId{d.ClientHelloID, nil}).NewUTLSConn(conn, config) - if err = adapter.HandshakeContext(ctx); err != nil { - conn.Close() - return nil, err - } - - proto := adapter.ConnectionState().NegotiatedProtocol - - log.Printf("negotiated protocol: %s", proto) - - return adapter, nil -} diff --git a/src-go/server/internal/tls/factory.go b/src-go/server/internal/tls/factory.go index 737b1fb..84cb01b 100644 --- a/src-go/server/internal/tls/factory.go +++ b/src-go/server/internal/tls/factory.go @@ -22,20 +22,11 @@ type ConnFactory interface { type FactoryWithClientHelloId struct { // The TLS client hello id (fingerprint) to use. // Defaults to [DefaultClientHelloID]. - ClientHelloID *utls.ClientHelloID - ClientHelloSpec *utls.ClientHelloSpec + GetClientHello func(sni string) (*utls.ClientHelloID, *utls.ClientHelloSpec) } // NewUTLSConn implements ConnFactory. func (f *FactoryWithClientHelloId) NewUTLSConn(conn net.Conn, config *tls.Config) oohttp.TLSConn { - clientHelloID := f.ClientHelloID - - if f.ClientHelloSpec != nil { - clientHelloID = &utls.HelloCustom - } else if clientHelloID == nil { - clientHelloID = DefaultClientHelloID - } - uConfig := &utls.Config{ RootCAs: config.RootCAs, NextProtos: config.NextProtos, @@ -44,5 +35,7 @@ func (f *FactoryWithClientHelloId) NewUTLSConn(conn net.Conn, config *tls.Config InsecureSkipVerify: true, } - return &uconnAdapter{UConn: utls.UClient(conn, uConfig, *clientHelloID), spec: f.ClientHelloSpec} + clientHelloID, spec := f.GetClientHello(config.ServerName) + + return &uconnAdapter{UConn: utls.UClient(conn, uConfig, *clientHelloID), spec: spec} } diff --git a/src-go/server/internal/tls/fingerprint.go b/src-go/server/internal/tls/fingerprint.go index 3087a6a..a554abd 100644 --- a/src-go/server/internal/tls/fingerprint.go +++ b/src-go/server/internal/tls/fingerprint.go @@ -6,11 +6,13 @@ import ( utls "github.com/refraction-networking/utls" ) +const DefaultFingerprint = "Default" + type Fingerprint string func (fingerprint Fingerprint) ToClientHelloId() *utls.ClientHelloID { - if fingerprint == "Default" { - return nil + if fingerprint == DefaultFingerprint { + return DefaultClientHelloID } parts := strings.Split(string(fingerprint), " ") diff --git a/src-go/server/internal/transport.go b/src-go/server/internal/transport.go index 1c273a9..180f102 100644 --- a/src-go/server/internal/transport.go +++ b/src-go/server/internal/transport.go @@ -3,11 +3,12 @@ package internal import ( "encoding/json" "errors" - "fmt" "net" "strings" "time" + utls "github.com/refraction-networking/utls" + internalTls "server/internal/tls" oohttp "github.com/ooni/oohttp" @@ -20,19 +21,23 @@ const ( DefaultTLSHandshakeTimeout = time.Duration(10) * time.Second ) -type TransportConfig struct { - // Hostname to send the HTTP request to. - Host string +var DefaultConfig TransportConfig - // HTTP or HTTPs. +type RequestConfig struct { + Host string Scheme string +} + +type TransportConfig struct { + // InterceptProxyAddr to intercept client tls fingerprint + InterceptProxyAddr string + + // BurpAddr + BurpAddr string // The TLS fingerprint to use. Fingerprint internalTls.Fingerprint - // Hexadecimal Client Hello to use - HexClientHello internalTls.HexClientHello - // The maximum amount of time a dial will wait for a connect to complete. // Defaults to [DefaultHttpTimeout]. HttpTimeout int @@ -48,6 +53,9 @@ type TransportConfig struct { // The maximum amount of time to wait for a TLS handshake. // Defaults to [DefaultTLSHandshakeTimeout]. TLSHandshakeTimeout int + + // UseInterceptedFingerprint use intercepted fingerprint + UseInterceptedFingerprint bool } func ParseTransportConfig(data string) (*TransportConfig, error) { @@ -64,13 +72,29 @@ func ParseTransportConfig(data string) (*TransportConfig, error) { return config, nil } +func ParseRequestConfig(data string) (*RequestConfig, error) { + config := &RequestConfig{} + + if strings.TrimSpace(data) == "" { + return nil, errors.New("missing request configuration") + } + + if err := json.Unmarshal([]byte(data), config); err != nil { + return nil, err + } + + return config, nil +} + // NewTransport creates a new transport using the given configuration. -func NewTransport(config *TransportConfig) (*oohttp.StdlibTransport, error) { +func NewTransport(getInterceptedFingerprint func(sni string) string) (*oohttp.StdlibTransport, error) { dialer := &net.Dialer{ Timeout: DefaultHttpTimeout, KeepAlive: DefaultHttpKeepAlive, } + config := DefaultConfig + if config.HttpTimeout != 0 { dialer.Timeout = time.Duration(config.HttpTimeout) * time.Second } @@ -78,18 +102,30 @@ func NewTransport(config *TransportConfig) (*oohttp.StdlibTransport, error) { dialer.KeepAlive = time.Duration(config.HttpKeepAliveInterval) * time.Second } - tlsFactory := &internalTls.FactoryWithClientHelloId{} + var spec *utls.ClientHelloSpec + clientHelloID := config.Fingerprint.ToClientHelloId() - if config.HexClientHello != "" { - spec, err := config.HexClientHello.ToClientHelloId() - if err != nil { - return nil, fmt.Errorf("create spec from client hello: %w", err) + getClientHello := func(sni string) (*utls.ClientHelloID, *utls.ClientHelloSpec) { + if !config.UseInterceptedFingerprint { + return clientHelloID, spec } - tlsFactory.ClientHelloSpec = spec - } else if config.Fingerprint != "" { - tlsFactory.ClientHelloID = config.Fingerprint.ToClientHelloId() + + interceptedFingerprint := getInterceptedFingerprint(sni) + + if interceptedFingerprint == "" { + return clientHelloID, spec + } + + interceptedSpec, err := internalTls.HexClientHello(interceptedFingerprint).ToClientHelloSpec() + if err == nil { + return &utls.HelloCustom, interceptedSpec + } + + return clientHelloID, spec } + tlsFactory := &internalTls.FactoryWithClientHelloId{GetClientHello: getClientHello} + transport := &oohttp.Transport{ Proxy: oohttp.ProxyFromEnvironment, DialContext: dialer.DialContext, diff --git a/src-go/server/server.go b/src-go/server/server.go index a3d56ba..e227e5a 100644 --- a/src-go/server/server.go +++ b/src-go/server/server.go @@ -13,24 +13,36 @@ import ( http "github.com/ooni/oohttp" ) -// DefaultAddress is the default listener address. -const DefaultAddress string = "127.0.0.1:8887" +const ( + // DefaultInterceptProxyAddress is the default intercept proxy listener address. + DefaultInterceptProxyAddress string = "127.0.0.1:8886" + // DefaultBurpProxyAddress is the default burp proxy listener address. + DefaultBurpProxyAddress string = "127.0.0.1:8080" + // DefaultSpoofProxyAddress is the default spoof proxy listener address. + DefaultSpoofProxyAddress string = "127.0.0.1:8887" +) // ConfigurationHeaderKey is the name of the header field that contains the RoundTripper configuration. // Note that this key can only start with one capital letter and the rest in lowercase. // Unfortunately, this seems to be a limitation of Burp's Extender API. const ConfigurationHeaderKey = "Awesometlsconfig" -var s *http.Server +var ( + s *http.Server + proxy *interceptProxy + isProxyOn bool +) func init() { s = &http.Server{} } func StartServer(addr string) error { + s = &http.Server{} + ca, private, err := NewCertificateAuthority() if err != nil { - return err + return fmt.Errorf("NewCertificateAuthority, err: %w", err) } m := http.NewServeMux() @@ -40,13 +52,13 @@ func StartServer(addr string) error { configHeader := req.Header.Get(ConfigurationHeaderKey) req.Header.Del(ConfigurationHeaderKey) - config, err := internal.ParseTransportConfig(configHeader) + config, err := internal.ParseRequestConfig(configHeader) if err != nil { writeError(w, err) return } - transport, err := internal.NewTransport(config) + transport, err := internal.NewTransport(proxy.getTLSFingerprint) if err != nil { writeError(w, err) return @@ -54,7 +66,7 @@ func StartServer(addr string) error { req.URL.Host = config.Host req.URL.Scheme = config.Scheme - if strings.HasPrefix(string(config.Fingerprint), "Chrome") { + if strings.HasPrefix(string(internal.DefaultConfig.Fingerprint), "Chrome") { pHeaderOrder := []string{":method", ":authority", ":scheme", ":path"} for _, pHeader := range pHeaderOrder { req.Header.Add(http.PHeaderOrderKey, pHeader) @@ -98,12 +110,59 @@ func StartServer(addr string) error { listener, err := net.Listen("tcp", s.Addr) if err != nil { - return err + return fmt.Errorf("listen, err: %w", err) } tlsListener := tls.NewListener(listener, s.TLSConfig) - return s.Serve(tlsListener) + if err := s.Serve(tlsListener); err != nil { + return fmt.Errorf("serve, err: %w", err) + } + + return nil +} + +func SaveSettings(configJson string) error { + config, err := internal.ParseTransportConfig(configJson) + if err != nil { + return err + } + + if !isProxyOn && config.UseInterceptedFingerprint { + if err = StartProxy(config.InterceptProxyAddr, config.BurpAddr); err != nil { + return err + } + isProxyOn = true + } else if isProxyOn && !config.UseInterceptedFingerprint { + if err = StopProxy(); err != nil { + return err + } + isProxyOn = false + } + + internal.DefaultConfig = *config + + return nil +} + +func StartProxy(interceptAddr, burpAddr string) (err error) { + p, err := newInterceptProxy(interceptAddr, burpAddr) + if err != nil { + return err + } + + proxy = p + + go proxy.Start() + + return nil +} + +func StopProxy() (err error) { + if proxy == nil { + return nil + } + return proxy.Stop() } func StopServer() error { diff --git a/src-go/server/server_test.go b/src-go/server/server_test.go index bddf25b..861cc80 100644 --- a/src-go/server/server_test.go +++ b/src-go/server/server_test.go @@ -3,7 +3,7 @@ package server import "testing" func TestStartServer(t *testing.T) { - if err := StartServer(DefaultAddress); err != nil { + if err := StartServer(DefaultSpoofProxyAddress); err != nil { t.Fatal(err) } diff --git a/src/main/java/burp/BurpExtender.java b/src/main/java/burp/BurpExtender.java index 11ea00b..c74ceb0 100644 --- a/src/main/java/burp/BurpExtender.java +++ b/src/main/java/burp/BurpExtender.java @@ -1,12 +1,14 @@ package burp; import com.google.gson.Gson; +import com.sun.jna.Native; import java.io.PrintWriter; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.Arrays; -public class BurpExtender implements IBurpExtender, IHttpListener, IExtensionStateListener { +public class BurpExtender implements IBurpExtender, IHttpListener, IExtensionStateListener, IProxyListener { private PrintWriter stdout; private PrintWriter stderr; private Gson gson; @@ -29,17 +31,32 @@ public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) callbacks.setExtensionName("Awesome TLS"); callbacks.registerHttpListener(this); + callbacks.registerProxyListener(this); callbacks.registerExtensionStateListener(this); - callbacks.addSuiteTab(new SettingsTab(this.settings)); + callbacks.addSuiteTab(new SettingsTab(this.settings, callbacks)); new Thread(() -> { - var err = ServerLibrary.INSTANCE.StartServer(this.settings.getAddress()); + var err = ServerLibrary.INSTANCE.StartServer(this.settings.getSpoofProxyAddress()); if (!err.equals("")) { var isGraceful = err.contains("Server stopped"); // server was stopped gracefully by calling StopServer() var out = isGraceful ? this.stdout : this.stderr; out.println(err); if (!isGraceful) callbacks.unloadExtension(); // fatal error; disable the extension } + + var transportConfig = new TransportConfig(); + transportConfig.Fingerprint = this.settings.getFingerprint(); + transportConfig.HttpTimeout = this.settings.getHttpTimeout(); + transportConfig.HttpKeepAliveInterval = this.settings.getHttpKeepAliveInterval(); + transportConfig.IdleConnTimeout = this.settings.getIdleConnTimeout(); + transportConfig.TlsHandshakeTimeout = this.settings.getTlsHandshakeTimeout(); + transportConfig.UseInterceptedFingerprint = this.settings.getUseInterceptedFingerprint(); + var goConfigJSON = this.gson.toJson(transportConfig); + + err = ServerLibrary.INSTANCE.SaveSettings(goConfigJSON); + if (!err.equals("")) { + this.stdout.println(err); + } }).start(); } @@ -50,23 +67,16 @@ public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequ var httpService = messageInfo.getHttpService(); var req = this.helpers.analyzeRequest(messageInfo.getRequest()); - var transportConfig = new TransportConfig(); + var transportConfig = new RequestConfig(); transportConfig.Host = httpService.getHost(); transportConfig.Scheme = httpService.getProtocol(); - transportConfig.Fingerprint = this.settings.getFingerprint(); - transportConfig.HexClientHello = this.settings.getHexClientHello(); - transportConfig.HttpTimeout = this.settings.getHttpTimeout(); - transportConfig.HttpKeepAliveInterval = this.settings.getHttpKeepAliveInterval(); - transportConfig.IdleConnTimeout = this.settings.getIdleConnTimeout(); - transportConfig.TlsHandshakeTimeout = this.settings.getTlsHandshakeTimeout(); var goConfigJSON = this.gson.toJson(transportConfig); - this.stdout.println("Using config: " + goConfigJSON); var headers = req.getHeaders(); headers.add(HEADER_KEY + ": " + goConfigJSON); try { - var url = new URL("https://" + this.settings.getAddress()); + var url = new URL("https://" + this.settings.getSpoofProxyAddress()); messageInfo.setHttpService(helpers.buildHttpService(url.getHost(), url.getPort(), url.getProtocol())); messageInfo.setRequest(helpers.buildHttpMessage(headers, Arrays.copyOfRange(messageInfo.getRequest(), req.getBodyOffset(), messageInfo.getRequest().length))); } catch (Exception e) { @@ -82,4 +92,14 @@ public void extensionUnloaded() { this.stderr.println(err); } } + + @Override + public void processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message) { + if (message.getMessageInfo().getHttpService().getHost().equals("awesome-tls-error")) { + var bodyOffset = this.helpers.analyzeRequest(message.getMessageInfo().getRequest()).getBodyOffset(); + var req = message.getMessageInfo().getRequest(); + var body = Arrays.copyOfRange(req, bodyOffset, req.length); + this.stderr.println(new String(body, StandardCharsets.UTF_8)); + } + } } diff --git a/src/main/java/burp/RequestConfig.java b/src/main/java/burp/RequestConfig.java new file mode 100644 index 0000000..d1d5b12 --- /dev/null +++ b/src/main/java/burp/RequestConfig.java @@ -0,0 +1,13 @@ +package burp; + +public class RequestConfig { + /* + * Hostname. + */ + public String Host; + + /** + * Protocol scheme (HTTP or HTTPS). + */ + public String Scheme; +} diff --git a/src/main/java/burp/ServerLibrary.java b/src/main/java/burp/ServerLibrary.java index d07d85d..9f91beb 100644 --- a/src/main/java/burp/ServerLibrary.java +++ b/src/main/java/burp/ServerLibrary.java @@ -7,7 +7,9 @@ public interface ServerLibrary extends Library { ServerLibrary INSTANCE = Native.load((Platform.isMac() ? "lib" : "") + "server." + (Platform.isWindows() ? "dll" : Platform.isMac() ? "dylib" : "so"), ServerLibrary.class); - String StartServer(String address); + String StartServer(String spoofAddr); String StopServer(); + + String SaveSettings(String config); void SmokeTest(); } diff --git a/src/main/java/burp/Settings.java b/src/main/java/burp/Settings.java index b8f4de8..b5a67f4 100644 --- a/src/main/java/burp/Settings.java +++ b/src/main/java/burp/Settings.java @@ -1,17 +1,23 @@ package burp; +import java.io.PrintWriter; + public class Settings { private final IBurpExtenderCallbacks callbacks; - private final String address = "Address"; + private final String spoofProxyAddress = "SpoofProxyAddress"; + private final String interceptProxyAddress = "InterceptProxyAddress"; + private final String burpProxyAddress = "BurpProxyAddress"; private final String fingerprint = "Fingerprint"; - private final String hexClientHello = "HexClientHello"; + private final String useInterceptedFingerprint = "UseInterceptedFingerprint"; private final String httpTimeout = "HttpTimeout"; private final String httpKeepAliveInterval = "HttpKeepAliveInterval"; private final String idleConnTimeout = "IdleConnTimeout"; private final String tlsHandshakeTimeout = "TlsHandshakeTimeout"; - public static final String DEFAULT_ADDRESS = "127.0.0.1:8887"; + public static final String DEFAULT_SPOOF_PROXY_ADDRESS = "127.0.0.1:8887"; + public static final String DEFAULT_INTERCEPT_PROXY_ADDRESS = "127.0.0.1:8886"; + public static final String DEFAULT_BURP_PROXY_ADDRESS = "127.0.0.1:8080"; public static final String DEFAULT_HTTP_TIMEOUT = "30"; public static final String DEFAULT_IDLE_CONN_TIMEOUT = "90"; public static final String DEFAULT_TLS_HANDSHAKE_TIMEOUT = "10"; @@ -23,9 +29,17 @@ public Settings(IBurpExtenderCallbacks callbacks) { } private void setDefaults() { - if (this.read(this.address) == null) { - this.write(this.address, DEFAULT_ADDRESS); - } + if (this.read(this.spoofProxyAddress) == "" || this.read(this.spoofProxyAddress) == null) { + this.write(this.spoofProxyAddress, DEFAULT_SPOOF_PROXY_ADDRESS); + } + + if (this.read(this.interceptProxyAddress) == "" || this.read(this.interceptProxyAddress) == null) { + this.write(this.interceptProxyAddress, DEFAULT_INTERCEPT_PROXY_ADDRESS); + } + + if (this.read(this.burpProxyAddress) == "" || this.read(this.burpProxyAddress) == null) { + this.write(this.burpProxyAddress, DEFAULT_BURP_PROXY_ADDRESS); + } if (this.read(this.fingerprint) == null) { this.write(this.fingerprint, DEFAULT_TLS_FINGERPRINT); @@ -56,12 +70,36 @@ public void write(String key, String value) { this.callbacks.saveExtensionSetting(key, value); } - public String getAddress() { - return this.read(this.address); + public String getSpoofProxyAddress() { + return this.read(this.spoofProxyAddress); + } + + public void setSpoofProxyAddress(String spoofProxyAddress) { + this.write(this.spoofProxyAddress, spoofProxyAddress); + } + + public String getInterceptProxyAddress() { + return this.read(this.interceptProxyAddress); + } + + public void setInterceptProxyAddress(String interceptProxyAddress) { + this.write(this.interceptProxyAddress, interceptProxyAddress); + } + + public String getBurpProxyAddress() { + return this.read(this.burpProxyAddress); + } + + public void setBurpProxyAddress(String burpProxyAddress) { + this.write(this.burpProxyAddress, burpProxyAddress); } - public void setAddress(String address) { - this.write(this.address, address); + public Boolean getUseInterceptedFingerprint() { + return Boolean.parseBoolean(this.read(this.useInterceptedFingerprint)); + } + + public void setUseInterceptedFingerprint(Boolean useInterceptedFingerprint) { + this.write(this.useInterceptedFingerprint, String.valueOf(useInterceptedFingerprint)); } public int getHttpTimeout() { @@ -86,10 +124,6 @@ public void setFingerprint(String fingerprint) { this.write(this.fingerprint, fingerprint); } - public String getHexClientHello() { return this.read(this.hexClientHello); } - - public void setHexClientHello(String hexClientHello) { this.write(this.hexClientHello, hexClientHello); } - public int getIdleConnTimeout() { return Integer.parseInt(this.read(this.idleConnTimeout)); } diff --git a/src/main/java/burp/SettingsTab.form b/src/main/java/burp/SettingsTab.form index 58de9d9..19cc1fa 100644 --- a/src/main/java/burp/SettingsTab.form +++ b/src/main/java/burp/SettingsTab.form @@ -1,146 +1,232 @@
- + - + - + - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/burp/SettingsTab.java b/src/main/java/burp/SettingsTab.java index 1b105aa..2224a6d 100644 --- a/src/main/java/burp/SettingsTab.java +++ b/src/main/java/burp/SettingsTab.java @@ -1,5 +1,6 @@ package burp; +import com.google.gson.Gson; import com.intellij.uiDesigner.core.GridConstraints; import com.intellij.uiDesigner.core.GridLayoutManager; import com.intellij.uiDesigner.core.Spacer; @@ -8,13 +9,16 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.PrintWriter; public class SettingsTab implements ITab { private JComboBox comboBoxFingerprint; private JPanel panelMain; private JLabel labelFingerprint; - private JTextField textFieldAddress; - private JLabel labelAddress; + private JTextField textFieldSpoofProxyAddress; + private JTextField textFieldInterceptProxyAddress; + private JTextField textFieldBurpProxyAddress; + private JLabel labelSpoofProxyAddress; private JButton buttonSave; private JLabel labelTimeout; private JSpinner spinnerHttpTimout; @@ -24,8 +28,17 @@ public class SettingsTab implements ITab { private JSpinner spinnerIdleConnTimeout; private JLabel labelTlsHandshakeTimeout; private JSpinner spinnerTlsHandshakeTimeout; - private JLabel labelHexClientHello; - private JTextField textFieldHexClientHello; + private JLabel labelInterceptProxyAddress; + private JLabel labelBurpProxyAddress; + private JCheckBox checkBoxButtonUseInterceptedFingerprint; + private JTabbedPane tabbedPaneTab; + private JPanel panelSettings; + private JPanel panelAdvanced; + private JButton buttonSaveAdvanced; + + private Gson gson; + private PrintWriter stdout; + private PrintWriter stderr; @Override public String getTabCaption() { @@ -37,9 +50,14 @@ public Component getUiComponent() { return panelMain; } - public SettingsTab(Settings settings) { - textFieldAddress.setText(settings.getAddress()); - textFieldHexClientHello.setText(settings.getHexClientHello()); + public SettingsTab(Settings settings, IBurpExtenderCallbacks callbacks) { + gson = new Gson(); + this.stdout = new PrintWriter(callbacks.getStdout(), true); + this.stderr = new PrintWriter(callbacks.getStderr(), true); + + textFieldInterceptProxyAddress.setText(settings.getInterceptProxyAddress()); + textFieldBurpProxyAddress.setText(settings.getBurpProxyAddress()); + textFieldSpoofProxyAddress.setText(settings.getSpoofProxyAddress()); spinnerHttpTimout.setValue(settings.getHttpTimeout()); spinnerKeepAlive.setValue(settings.getHttpKeepAliveInterval()); @@ -54,17 +72,57 @@ public SettingsTab(Settings settings) { buttonSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - settings.setAddress(textFieldAddress.getText()); - settings.setFingerprint((String) comboBoxFingerprint.getSelectedItem()); - settings.setHexClientHello(textFieldHexClientHello.getText()); - settings.setHttpTimeout((int) spinnerHttpTimout.getValue()); - settings.setIdleConnTimeout((int) spinnerIdleConnTimeout.getValue()); - settings.setHttpKeepAliveInterval((int) spinnerKeepAlive.getValue()); - settings.setTlsHandshakeTimeout((int) spinnerTlsHandshakeTimeout.getValue()); + var err = SaveSettings(settings); + if (!err.equals("")) { + JOptionPane.showMessageDialog(panelSettings, + err, + "Error", + JOptionPane.ERROR_MESSAGE); + } + } + }); + + buttonSaveAdvanced.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + var err = SaveSettings(settings); + if (!err.equals("")) { + JOptionPane.showMessageDialog(panelAdvanced, + err, + "Error", + JOptionPane.ERROR_MESSAGE); + } } }); } + private String SaveSettings(Settings settings) { + settings.setSpoofProxyAddress(textFieldSpoofProxyAddress.getText()); + settings.setFingerprint((String) comboBoxFingerprint.getSelectedItem()); + settings.setHttpTimeout((int) spinnerHttpTimout.getValue()); + settings.setIdleConnTimeout((int) spinnerIdleConnTimeout.getValue()); + settings.setHttpKeepAliveInterval((int) spinnerKeepAlive.getValue()); + settings.setTlsHandshakeTimeout((int) spinnerTlsHandshakeTimeout.getValue()); + settings.setInterceptProxyAddress(textFieldInterceptProxyAddress.getText()); + settings.setBurpProxyAddress(textFieldBurpProxyAddress.getText()); + settings.setUseInterceptedFingerprint(checkBoxButtonUseInterceptedFingerprint.isSelected()); + + var transportConfig = new TransportConfig(); + transportConfig.InterceptProxyAddr = settings.getInterceptProxyAddress(); + transportConfig.BurpAddr = settings.getBurpProxyAddress(); + transportConfig.Fingerprint = settings.getFingerprint(); + transportConfig.HttpTimeout = settings.getHttpTimeout(); + transportConfig.HttpKeepAliveInterval = settings.getHttpKeepAliveInterval(); + transportConfig.IdleConnTimeout = settings.getIdleConnTimeout(); + transportConfig.TlsHandshakeTimeout = settings.getTlsHandshakeTimeout(); + transportConfig.UseInterceptedFingerprint = settings.getUseInterceptedFingerprint(); + var goConfigJSON = this.gson.toJson(transportConfig); + + this.stdout.println("Using config: " + goConfigJSON); + + return ServerLibrary.INSTANCE.SaveSettings(goConfigJSON); + } + { // GUI initializer generated by IntelliJ IDEA GUI Designer // >>> IMPORTANT!! <<< @@ -81,59 +139,88 @@ public void actionPerformed(ActionEvent e) { */ private void $$$setupUI$$$() { panelMain = new JPanel(); - panelMain.setLayout(new GridLayoutManager(17, 7, new Insets(0, 0, 0, 0), -1, -1)); - final Spacer spacer1 = new Spacer(); - panelMain.add(spacer1, new GridConstraints(16, 2, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); - labelAddress = new JLabel(); - labelAddress.setRequestFocusEnabled(false); - labelAddress.setText("Listener address:"); - labelAddress.setToolTipText(""); - panelMain.add(labelAddress, new GridConstraints(0, 0, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - textFieldAddress = new JTextField(); - textFieldAddress.setToolTipText("Local address the HTTPS server should listen on. Requires extension reload."); - panelMain.add(textFieldAddress, new GridConstraints(1, 0, 1, 4, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); - labelTimeout = new JLabel(); - labelTimeout.setText("Http connection timeout (seconds)"); - panelMain.add(labelTimeout, new GridConstraints(7, 0, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - spinnerHttpTimout = new JSpinner(); - spinnerHttpTimout.setToolTipText("The maximum amount of time a dial will wait for a connect to complete."); - panelMain.add(spinnerHttpTimout, new GridConstraints(8, 0, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - labelKeepAlive = new JLabel(); - labelKeepAlive.setText("Http keep alive interval"); - panelMain.add(labelKeepAlive, new GridConstraints(9, 0, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + panelMain.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(3, 5, new Insets(0, 0, 0, 0), -1, -1)); + tabbedPaneTab = new JTabbedPane(); + panelMain.add(tabbedPaneTab, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, null, new Dimension(200, 200), null, 0, false)); + panelSettings = new JPanel(); + panelSettings.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(14, 1, new Insets(0, 0, 0, 0), -1, -1)); + tabbedPaneTab.addTab("settings", panelSettings); + labelSpoofProxyAddress = new JLabel(); + labelSpoofProxyAddress.setRequestFocusEnabled(false); + labelSpoofProxyAddress.setText("Listen address:"); + labelSpoofProxyAddress.setToolTipText(""); + panelSettings.add(labelSpoofProxyAddress, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + textFieldSpoofProxyAddress = new JTextField(); + textFieldSpoofProxyAddress.setToolTipText("Local address the proxy server should listen on. Requires extension reload."); + panelSettings.add(textFieldSpoofProxyAddress, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); labelFingerprint = new JLabel(); labelFingerprint.setEnabled(true); labelFingerprint.setHorizontalAlignment(10); labelFingerprint.setText("Fingerprint:"); labelFingerprint.setVerticalAlignment(0); labelFingerprint.setVerticalTextPosition(0); - panelMain.add(labelFingerprint, new GridConstraints(2, 0, 1, 5, GridConstraints.ANCHOR_NORTHWEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + panelSettings.add(labelFingerprint, new com.intellij.uiDesigner.core.GridConstraints(2, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_NORTHWEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); comboBoxFingerprint = new JComboBox(); - panelMain.add(comboBoxFingerprint, new GridConstraints(3, 0, 2, 7, GridConstraints.ANCHOR_NORTHWEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + panelSettings.add(comboBoxFingerprint, new com.intellij.uiDesigner.core.GridConstraints(3, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_NORTHWEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + labelTimeout = new JLabel(); + labelTimeout.setText("Http connection timeout (seconds)"); + panelSettings.add(labelTimeout, new com.intellij.uiDesigner.core.GridConstraints(4, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + spinnerHttpTimout = new JSpinner(); + spinnerHttpTimout.setToolTipText("The maximum amount of time a dial will wait for a connect to complete."); + panelSettings.add(spinnerHttpTimout, new com.intellij.uiDesigner.core.GridConstraints(5, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + labelKeepAlive = new JLabel(); + labelKeepAlive.setText("Http keep alive interval"); + panelSettings.add(labelKeepAlive, new com.intellij.uiDesigner.core.GridConstraints(6, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); spinnerKeepAlive = new JSpinner(); spinnerKeepAlive.setToolTipText("Specifies the interval between keep-alive probes for an active network connection."); - panelMain.add(spinnerKeepAlive, new GridConstraints(10, 0, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + panelSettings.add(spinnerKeepAlive, new com.intellij.uiDesigner.core.GridConstraints(7, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); labelIdleConnTimeout = new JLabel(); labelIdleConnTimeout.setText("Idle connection timeout"); - panelMain.add(labelIdleConnTimeout, new GridConstraints(11, 0, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + panelSettings.add(labelIdleConnTimeout, new com.intellij.uiDesigner.core.GridConstraints(8, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); spinnerIdleConnTimeout = new JSpinner(); spinnerIdleConnTimeout.setToolTipText("The maximum amount of time an idle (keep-alive) connection will remain idle before closing itself."); - panelMain.add(spinnerIdleConnTimeout, new GridConstraints(12, 0, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + panelSettings.add(spinnerIdleConnTimeout, new com.intellij.uiDesigner.core.GridConstraints(9, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); labelTlsHandshakeTimeout = new JLabel(); labelTlsHandshakeTimeout.setText("TLS handshake timeout"); - panelMain.add(labelTlsHandshakeTimeout, new GridConstraints(13, 0, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + panelSettings.add(labelTlsHandshakeTimeout, new com.intellij.uiDesigner.core.GridConstraints(10, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); spinnerTlsHandshakeTimeout = new JSpinner(); spinnerTlsHandshakeTimeout.setToolTipText("The maximum amount of time to wait for a TLS handshake."); - panelMain.add(spinnerTlsHandshakeTimeout, new GridConstraints(14, 0, 1, 3, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + panelSettings.add(spinnerTlsHandshakeTimeout, new com.intellij.uiDesigner.core.GridConstraints(11, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); buttonSave = new JButton(); buttonSave.setText("Save all settings"); - panelMain.add(buttonSave, new GridConstraints(15, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - labelHexClientHello = new JLabel(); - labelHexClientHello.setText("Hex Client Hello"); - panelMain.add(labelHexClientHello, new GridConstraints(5, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - textFieldHexClientHello = new JTextField(); - textFieldHexClientHello.setToolTipText("Custom client hello as hex stream."); - panelMain.add(textFieldHexClientHello, new GridConstraints(6, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + panelSettings.add(buttonSave, new com.intellij.uiDesigner.core.GridConstraints(12, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JPanel panel1 = new JPanel(); + panel1.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1)); + panelSettings.add(panel1, new com.intellij.uiDesigner.core.GridConstraints(13, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + panelAdvanced = new JPanel(); + panelAdvanced.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(7, 1, new Insets(0, 0, 0, 0), -1, -1)); + panelAdvanced.setToolTipText(""); + tabbedPaneTab.addTab("advanced", panelAdvanced); + labelInterceptProxyAddress = new JLabel(); + labelInterceptProxyAddress.setEnabled(true); + labelInterceptProxyAddress.setText("Intercept proxy address:"); + panelAdvanced.add(labelInterceptProxyAddress, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + textFieldInterceptProxyAddress = new JTextField(); + textFieldInterceptProxyAddress.setToolTipText("Local address the intercept proxy server should listen on. Use it to configure proxy on your client. Requires extension reload."); + panelAdvanced.add(textFieldInterceptProxyAddress, new com.intellij.uiDesigner.core.GridConstraints(2, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + labelBurpProxyAddress = new JLabel(); + labelBurpProxyAddress.setText("Burp proxy address:"); + panelAdvanced.add(labelBurpProxyAddress, new com.intellij.uiDesigner.core.GridConstraints(3, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + textFieldBurpProxyAddress = new JTextField(); + textFieldBurpProxyAddress.setText(""); + panelAdvanced.add(textFieldBurpProxyAddress, new com.intellij.uiDesigner.core.GridConstraints(4, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + buttonSaveAdvanced = new JButton(); + buttonSaveAdvanced.setHideActionText(false); + buttonSaveAdvanced.setText("Save all settings"); + panelAdvanced.add(buttonSaveAdvanced, new com.intellij.uiDesigner.core.GridConstraints(5, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JPanel panel2 = new JPanel(); + panel2.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1)); + panelAdvanced.add(panel2, new com.intellij.uiDesigner.core.GridConstraints(6, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + final com.intellij.uiDesigner.core.Spacer spacer1 = new com.intellij.uiDesigner.core.Spacer(); + panel2.add(spacer1, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_VERTICAL, 1, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); + checkBoxButtonUseInterceptedFingerprint = new JCheckBox(); + checkBoxButtonUseInterceptedFingerprint.setText("Use intercepted tls fingerprint"); + panelAdvanced.add(checkBoxButtonUseInterceptedFingerprint, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); } /** @@ -142,4 +229,5 @@ public void actionPerformed(ActionEvent e) { public JComponent $$$getRootComponent$$$() { return panelMain; } + } diff --git a/src/main/java/burp/TransportConfig.java b/src/main/java/burp/TransportConfig.java index db6ae5d..60ca111 100644 --- a/src/main/java/burp/TransportConfig.java +++ b/src/main/java/burp/TransportConfig.java @@ -5,15 +5,15 @@ * Represents the configuration for a transport. */ public class TransportConfig { - /* - * Hostname. - */ - public String Host; /** - * Protocol scheme (HTTP or HTTPS). + * Intercept ClientHello Proxy Address. + */ + public String InterceptProxyAddr; + /** + * Burp Proxy Address. */ - public String Scheme; + public String BurpAddr; /** * The TLS fingerprint to use. @@ -21,9 +21,9 @@ public class TransportConfig { public String Fingerprint; /* - * Hexadecimal Client Hello + * Use intercepted fingerprint from request; */ - public String HexClientHello; + public Boolean UseInterceptedFingerprint; /** * The maximum amount of time a dial will wait for a connect to complete.