Suzanne Cook - Developing the CLR, Part I

Does the tour continue in a Part III ?
I think there's a real noticeable difference in GUI apps.dotnetjunkie wrote:I don't think that's an issue. 99% of managed code runs without any performance problems today. And for the remaining few applications, you can always switch to faster hardware. Which doesn't mean that the .NET developers at Microsoft don't have to care about performance while coding of course!!!
dotnetjunkie wrote:
Beer28 wrote:
Beer28 wrote:
If they made a CPU that took managed instructions, it wouldn't be managed or portable code anymore. That and the CLR inside the CPU that did the virtual stack for objects larger than 32/64 bit ect... and recognized object references would be horribly complex for hardware embedded software, could never be updated. You could possibly make it flashable, but can you imagine grandma flashing her CPU? **
dotnetjunkie wrote:LOL, is this an old homepage of Suzanne Cook?
http://www.cs.utah.edu/~scook/
Must be with all the geek stuff on it!
It was funny to see that video clip on the front page! I've seen it on TV many times, it was made here in Belgium (where I live).
Beer28 wrote:
You don't understand, gcj actually compiles to a native binary you can zip/tar and give to a friend and he can run it on his or her machine with the runtime "dll" just like you could with a visual basic 5-6 app by including msvbvm5-6.dll
Unfortunately, I don't have the time to commit to an entire new platform. For now, .NET is my koolaid.Beer28 wrote:
gcj actually makes something tangibly reusable that you can distribute as a standalone with the support "dll", which in unix speak is a shared object file, .so.
At my last job, every job posting must be made public first before a hire can be made (to prevent the Project Manager's cousin being the only applicant, I guess).rhm wrote:do PR really review stuff posted by Microsofties?
Beer28 wrote:
rhm wrote:It's actually not as big a deal as you think. See this.
There's a good reason MS doesn't support this kind of deployment. Applications deployed in this way won't get any hotfixes to the runtime or base class libraries. In fact people redistributing parts of the .NET framework using that tool are actually breaking the EULA.
You're actually mistaken, gcj isn't redistributing parts of the java runtime from Sun. Such as is with salamander.
Beer28 wrote:
It's actually compiling java to asm, as you would compile C++ to asm, then doing asm to opcodes and making an elf file, which is the unix/linux version of .exe
Salamander is a cheap trick next to gcj. To do the same on windows, somebody would have to make a C# compiler from scratch that compiles to real cpu ASM, not virtual asm codes, or a MSIL to asm compiler in the worst case scenario.
Beer28 wrote:
There is a huge gaping difference in your comparisons. You may have deployment situations where you want a certain functionality which has been depreciated or removed by a later version.
Beer28 wrote:
With the CLR, you never know which version a person will have on their machine. Say by the time the CLR 10 rolls around 25% of the CLR 1's functions have been depreciated or are gone. That's when your statically linked gcj shines. The OS at that time will come with the latest Virtual Machine, each additional will be a 20+ meg download. That's alot of versions by that time to load up for 1 program that has it as a dependancy.
Beer28 wrote:
Some functions in msvbvm5 were no longer present in msvbvm6, but if you included the msvbvm5.dll in your distribution, you could keep your code going for years in distro with no mods.
Beer28 wrote:
That is the power of binary images, loadable, usable binary images.
If you distribute the source, then that's another story.
Beer28 wrote:
Oh, that reminds me, with Java compiled to native instructions, you can NO LONGER USE djdecompiler, or .NET reflector or anything else.
Your code is now as hard to look at as C++ or C compiled code. Obfuscation won't fool good coders that use debuggers. When you get down to disassembled x86 or 64 code, that's a nighmare, unless you're looking for easily crackable progs, which have a bool type pass/fail which a cracker could no op through a check call or change a verification result.
So native code is also good because it's an added layer of protection against reverse engineering.
Maybe we should take this offline, at least to let this thread go back on topic.
You have my weblog URL. Bring a few friends to carry you back home, man!
That's very good
Beer28 wrote:
Minh wrote: Do you forsee a day where JIT'ed code runs as fast as unmanaged C++ code? I mean, that's theoretically possible, right? Just a matter of how efficient the JIT compiler compares the the C++ compiler? And you guys are working on a MSIL CPU, right?
I don't think it's possible, unless you have a homeade C++2ASM generator. Then you made your own homebrew style ASM2Opcode generator to complement that as well.
If your 2 instruction converters were really bad, then you could output more instructions net than managed easily.
A C or to less extent C++ asm generator is supposed to code assembly language like a master assembly programmer though, and they've been fine tuning it for years, so fat chance is my opinion. Plus you have fine tuning keywords like fastcall for passing in args through regs instead of the stack, and inlining ect...
Have you tried the gnu jcg compiler?
http://gcc.gnu.org/java/
If you compile managed code to native such as this compiler does, then through some optimizations you'd have a shot at writing in managed code and spitting out opcode as optimized as C. The whole "managing of the code" is going to make that impossible if you don't though.
As far as a "managed" cpu, your opcodes are actually managed inside the cpu you have now. There are several tiers of steps inside the pentium that break down your code, and throw exceptions and faults ect....
It is managed, but on a level that is too obscure for normal users.
If they made a CPU that took managed instructions, it wouldn't be managed or portable code anymore. That and the CLR inside the CPU that did the virtual stack for objects larger than 32/64 bit ect... and recognized object references would be horribly complex for hardware embedded software, could never be updated. You could possibly make it flashable, but can you imagine grandma flashing her CPU? **
The whole point behind managed code is that it's virtual. It's made for application level code, and coders who don't need the fine grain of tuning provided by direct instruction conversions to cpu readable code.
EDIT: Even there, it would be unmanaged at some point inside the CPU. It's been years since the Altair 8800 was released, but ironically, inside the CPU, as I've been reading, instructions are broken down to microops, and in the end that big bad pentium is just a really complex altair doing masking of 8-32 bit codes.
EDIT2: ...with branch prediction, out of order microop processing, and instruction caching.
Beer28 wrote:
So native code is also good because it's an added layer of protection against reverse engineering.
WinInsider wrote:Beer28 raises very important point. Many companies want to protect their intellectual property (resources and time) that they put into making a software product, and it is a big issue, knowing that someone can take .NET DLL or EXE and quite easily decompile. I know there are tools that "obfuscate" the MSIL, but do not come close to ASM native image.
I am not with the latest buzz, but I would hope that next version of VS 2005 would have much better NGEN that not only could put .NET Native Image into GAC, but also produce standalone app, that could only be run on target platform that has compatible .NET libraries installed.
Beer28 wrote:With .NET, you can decompile, take the source, even obfuscated, and modify and recompile with your new additions. Even dll2lib and object code relocaters will not allow this in x86/64.
Beer28 wrote:additionally, with disassembled x86/64 code, it's not easy to recompile and have it work correctly. I've never gotten it to on my own apps that I was testing against breakage.
If you modify the application directly as hex you can't add any instructions that will change the offsets of the relative addresses in the codes, so they do no ops to fill in gaps so it comes out to the missing call and verification lengths in the hex, and stuff. It's not very easy at all. That's not counting trying to reverse engineer.
I think the asm can be recompiled from dasm, but I don't know how.
Beer28 wrote:
Paul D. Murphy wrote:
Win32Dasm is a piece of crap. If you *really* want to learn how to decompile code get a real tool like IDA.
Worked fine for me.
Beer28 wrote:
Is there some sort of prize involved, because if not I'm not going to take my pay time and do that with it. My Free time goes to GPL and free code.
Beer28 wrote:
If you modify the application directly as hex you can't add any instructions that will change the offsets of the relative addresses in the codes, so they do no ops to fill in gaps so it comes out to the missing call and verification lengths in the hex, and stuff.
Beer28 wrote:That's not going to do it, posting on a forum is one thing but if I have to invest time in breaking software obfuscation as a demonstration, I'm not going to do it for free. + I'm not even sure if that type of thing is legal. When I used WDASM it was on my own software, not other people's.
Beer28 wrote:I don,t have time. I have to stop posting on this thread too.
Beer28 wrote:unless Dave or you are offering a prize for success, then I'll think about it, thx
Beer28 wrote:I'm not going to spend a day or 2 breaking obfuscation for your own amusement, sorry pal
Beer28 wrote:This is too inappropriate for this forum, I'm not going to continue talking about this. If you want to hire me independantly to do whatever, you can private message me and I'll put you on the waiting list.
I hope this will suffice.
Beer28 wrote:
Yeah, that's true, as long as the jmp + the address replace some useless instructions of the same hex length, but what instructions are going to be useless that you're going to do that to?
And B can you really effectively modify somebody's code that way to make your own version?
Beer28 wrote:I'm not going to educationally crack an application for your personal satisfaction, that is work, you are not aligned with free software, and you have to pay, period.
PS- That isn't even my field, so if you want bang for your buck I'd suggest getting a pro at doing that.
Beer28 wrote:
I'm not going to do it no matter what you say because it's a waste. I think other posters that code know it's a waste to do something like that on a dare. Reverse engineering code is only useful if it has an end, this has no end, it has no use, it's not worth the time.
![]() |
Beer28 wrote:
With .NET, you can decompile, take the source, even obfuscated, and modify and recompile with your new additions. |
Beer28 wrote:
Paul D. Murphy wrote:
------
You are out of your league beer, either admit you made it up or produce a result.
do you know ILASM? use ILDASM then edit it. There
Beer28 wrote:how's that?
if you want to see something that's nearly uncrackable or un reversable for C++ code, or very hard, try aspack, or pe crypt or one of the russian derivatives. The more obscure the harder it will be to get by.
Beer28 wrote:I never said I was going to reverse engineer a .NET module, you wrote that.
I don't even use .NET, I use Java TM (all rights reserved) virtual machine
![]() |
Beer28 wrote:
With .NET, you can decompile, take the source, even obfuscated, and modify and recompile with your new additions. |
Beer28 wrote:got my wickedy windows operating system on my left deskside wing tower all fired up here waiting...
It can't be too hard to write a hello world box and hit the obfuscate button....
Please get on with it.
public bool Send(bool openMailServerConnection, bool closeMailServerConnection) { bool flag = true; this.แ(); try { if (openMailServerConnection && ((this.แ == null) || (this.แ.Length < 1))) { throw new EmailException(แ.แ); } if ((this.แฉ == null) || (this.แฉ.Length < 1)) { throw new EmailException(แ.แ("แถแแแแแถแแแแแแแแแแแแแแแแแแแแแแแฏแปแธแถแแแแแแแแแแแแแแ")); } this.แ(this.แฌ, this.แฎ, this.แญ); this.แ = this.แ(); if (this.แ != null) { BeforeEmailSendEventArgs e = new BeforeEmailSendEventArgs(this.แ); this.OnBeforeEmailSend(e); if (!e.Send) { return false; } this.แ = e.EmailContents; } if (openMailServerConnection) { this.แ(); } string text = this.แฉ; if ((this.แ != null) && (this.แ.Length > 0)) { text = this.แ; this.แ(แ.แ("แถแชแฒแตแแฏแปแธแถแฃแฅ") + this.แ + แ.แ("แง"), true, true, SmtpState.MailFrom); } else { this.แ(แ.แ("แถแชแฒแตแแฏแปแธแถแฃแฅ") + this.แฉ + แ.แ("แง"), true, true, SmtpState.MailFrom); } this.แ(แ.แ, แ.แ("แปแแแแขแแฏแแแแแฏแปแธแถแ"), SmtpState.MailFrom); if ((this.แฌ != null) && (this.แฌ.Count > 0)) { foreach (string text2 in this.แฌ) { try { this.แ(แ.แ("แปแฌแนแฝแแฝแธแฃแฅ") + text2 + แ.แ("แง"), true, true, SmtpState.RcptTo); this.แ(แ.แ, string.Empty, SmtpState.RcptTo); continue; } catch (SmtpProtocolException exception) { if (!this.แฌ) { string text3 = (exception.Message + แ.แ("แแฟแแแแแขแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ") + text + แ.แ("แแแแแแแแแแแแแแแแแแแแแแแแแแแ") + this.แฉ + แ.แ("แแแแแ") + text2 + แ.แ("แแแแ") + this.แฉ + แ.แ("แแแแแขแแแแแแแแแแ แแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแ"); if (this.แ == null) { text3 = text3 + แ.แ("แแแแแแแแแแแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ"); } throw new SmtpProtocolException((text3 + แ.แ("แแฏแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแขแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแแแแแแฆแแแแแแแแแแแแแแขแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแนแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแฒแแแขแแแแแแแแแแแแแแแแแแแแแแแแชแผแนแแทแฎแฝแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแ แแแแแแแแแฎแแแแแถแแแแแแแแผแแแแแแแแแแแแฝแแขแแแฌแแแแแแแแแแแแแแแแแแแแแแแปแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแฐแแแตแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฌแแแแแแแ") + แ.แ("แแฝแแแแแแแแแแแแแแแแแแแแคแแแแแแฒแแแแแแปแแแแแแแแแฎแแแแแแแฆแแแแแ"), exception.ExpectedReplyCode, exception.ActualReplyCode); } continue; } catch (Exception exception2) { if (!this.แฌ) { string text4 = (exception2.Message + แ.แ("แแฟแแแแแขแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ") + text + แ.แ("แแแแแแแแแแแแแแแแแแแแแแแแแแแ") + this.แฉ + แ.แ("แแแแแ") + text2 + แ.แ("แแแแ") + this.แฉ + แ.แ("แแแแแขแแแแแแแแแแ แแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแ"); if (this.แ == null) { text4 = text4 + แ.แ("แแแแแแแแแแแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ"); } throw new EmailException((text4 + แ.แ("แแฏแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแขแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแแแแแแฆแแแแแแแแแแแแแแขแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแนแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแฒแแแขแแแแแแแแแแแแแแแแแแแแแแแแชแผแนแแทแฎแฝแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแ แแแแแแแแแฎแแแแแถแแแแแแแแผแแแแแแแแแแแแฝแแขแแแฌแแแแแแแแแแแแแแแแแแแแแแแปแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแฐแแแตแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฌแแแแแแแ") + แ.แ("แแฝแแแแแแแแแแแแแแแแแแแแคแแแแแแฒแแแแแแปแแแแแแแแแฎแแแแแแแฆแแแแแ"), exception2); } continue; } } } if ((this.แฎ != null) && (this.แฎ.Count > 0)) { foreach (string text5 in this.แฎ) { try { this.แ(แ.แ("แปแฌแนแฝแแฝแธแฃแฅ") + text5 + แ.แ("แง"), true, true, SmtpState.RcptTo); this.แ(แ.แ, แ.แ("แแแแแแแแแฌแแแแแฃแ") + text5, SmtpState.RcptTo); continue; } catch (SmtpProtocolException exception3) { if (!this.แฌ) { string text6 = (exception3.Message + แ.แ("แแฟแแแแแขแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ") + text + แ.แ("แแแแแแแแแแแแแแแแแแแแแแแแแแแ") + this.แฉ + แ.แ("แแแแแ") + text5 + แ.แ("แแแแ") + this.แฉ + แ.แ("แแแแแขแแแแแแแแแแ แแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแ"); if (this.แ == null) { text6 = text6 + แ.แ("แแแแแแแแแแแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ"); } throw new SmtpProtocolException((text6 + แ.แ("แแฏแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแขแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแแแแแแฆแแแแแแแแแแแแแแขแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแนแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแฒแแแขแแแแแแแแแแแแแแแแแแแแแแแแชแผแนแแทแฎแฝแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแ แแแแแแแแแฎแแแแแถแแแแแแแแผแแแแแแแแแแแแฝแแขแแแฌแแแแแแแแแแแแแแแแแแแแแแแปแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแฐแแแตแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฌแแแแแแแ") + แ.แ("แแฝแแแแแแแแแแแแแแแแแแแแคแแแแแแฒแแแแแแปแแแแแแแแแฎแแแแแแแฆแแแแแ"), exception3.ExpectedReplyCode, exception3.ActualReplyCode); } continue; } catch (Exception exception4) { if (!this.แฌ) { string text7 = (exception4.Message + แ.แ("แแฟแแแแแขแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ") + this.แฉ + แ.แ("แแแแแแแแแแแแแแแแแแแแแแแแแแแ") + this.แฉ + แ.แ("แแแแแ") + text5 + แ.แ("แแแแ") + this.แฉ + แ.แ("แแแแแขแแแแแแแแแแ แแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแ"); if (this.แ == null) { text7 = text7 + แ.แ("แแแแแแแแแแแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ"); } throw new EmailException((text7 + แ.แ("แแฏแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแขแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแแแแแแฆแแแแแแแแแแแแแแขแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแนแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแฒแแแขแแแแแแแแแแแแแแแแแแแแแแแแชแผแนแแทแฎแฝแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแ แแแแแแแแแฎแแแแแถแแแแแแแแผแแแแแแแแแแแแฝแแขแแแฌแแแแแแแแแแแแแแแแแแแแแแแปแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแฐแแแตแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฌแแแแแแแ") + แ.แ("แแฝแแแแแแแแแแแแแแแแแแแแคแแแแแแฒแแแแแแปแแแแแแแแแฎแแแแแแแฆแแแแแ")); } continue; } } } if ((this.แญ != null) && (this.แญ.Count > 0)) { foreach (string text8 in this.แญ) { try { this.แ(แ.แ("แปแฌแนแฝแแฝแธแฃแฅ") + text8 + แ.แ("แง"), true, true, SmtpState.RcptTo); this.แ(แ.แ, แ.แ("แแแแแแแแแซแแแฃ") + text8, SmtpState.RcptTo); continue; } catch (SmtpProtocolException exception5) { if (!this.แฌ) { string text9 = (exception5.Message + แ.แ("แแฟแแแแแขแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ") + text + แ.แ("แแแแแแแแแแแแแแแแแแแแแแแแแแแ") + this.แฉ + แ.แ("แแแแแ") + text8 + แ.แ("แแแแ") + this.แฉ + แ.แ("แแแแแขแแแแแแแแแแ แแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแ"); if (this.แ == null) { text9 = text9 + แ.แ("แแแแแแแแแแแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ"); } throw new SmtpProtocolException((text9 + แ.แ("แแฏแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแขแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแแแแแแฆแแแแแแแแแแแแแแขแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแนแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแฒแแแขแแแแแแแแแแแแแแแแแแแแแแแแชแผแนแแทแฎแฝแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแ แแแแแแแแแฎแแแแแถแแแแแแแแผแแแแแแแแแแแแฝแแขแแแฌแแแแแแแแแแแแแแแแแแแแแแแปแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแฐแแแตแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฌแแแแแแแ") + แ.แ("แแฝแแแแแแแแแแแแแแแแแแแแคแแแแแแฒแแแแแแปแแแแแแแแแฎแแแแแแแฆแแแแแ"), exception5.ExpectedReplyCode, exception5.ActualReplyCode); } continue; } catch (Exception exception6) { if (!this.แฌ) { string text10 = (exception6.Message + แ.แ("แแฟแแแแแขแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ") + this.แฉ + แ.แ("แแแแแแแแแแแแแแแแแแแแแแแแแแแ") + this.แฉ + แ.แ("แแแแ") + this.แฉ + แ.แ("แแแแแขแแแแแแแแแแ แแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแ"); if (this.แ == null) { text10 = text10 + แ.แ("แแแแแแแแแแแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ"); } throw new EmailException((text10 + แ.แ("แแฏแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแขแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแแแแแแฆแแแแแแแแแแแแแแขแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแนแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแฒแแแขแแแแแแแแแแแแแแแแแแแแแแแแชแผแนแแทแฎแฝแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแ แแแแแแแแแฎแแแแแถแแแแแแแแผแแแแแแแแแแแแฝแแขแแแฌแแแแแแแแแแแแแแแแแแแแแแแปแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแฐแแแตแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฌแแแแแแแ") + แ.แ("แแฝแแแแแแแแแแแแแแแแแแแแคแแแแแแฒแแแแแแปแแแแแแแแแฎแแแแแแแฆแแแแแ")); } continue; } } } this.แ(แ.แ("แญแชแฝแช"), true, true, SmtpState.DataInit); string text11 = ((แ.แ("แฟแแแแแขแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ") + text + แ.แ("แแแแแแแแแแแแแแแแแแแแแแแแแแแ") + this.แฉ + แ.แ("แแแแ") + this.แฉ + แ.แ("แแแแแขแแแแแแแแแแ แแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ")) + แ.แ("แแแแแแแแขแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแทแแแฟแแแแแแปแแแแแแแแแแแแแแแแทแแแฟแแแแแแผแแแแแแแแแแแแถแแแแแฑแแแแแผแแแแแแแแแแแปแแแแแแแแแแฏแแแแแแแแแแแแแแแแแแแแขแแแแแแแแผแถแฝแนแแแแแแแแ")) + แ.แ("แแฏแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแขแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแแแแแแฆแแแแแแแแแแแแแแขแแแแแแแแแแแแแแ แแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแตแแแนแแแแแแแแแแแแแแแแแแแแแแแแ") + แ.แ("แแฒแแแขแแแแแแแแแแแแแแแแแแแแแแแแชแผแนแแทแฎแฝแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแ แแแแแแแแแแแแแแ แแแแแแแแแฎแแแแแถแแแแแแแแผแแแแแแแแแแแแฝแแขแแแฌแแแแแแแแแแแแแแแแแแแแแแแปแแแแแแแแแแแแแแแแฎแแแแแถแแแแแแแแฐแแแตแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแแฌแแแแแแแ"); this.แ(แ.แ, text11, SmtpState.DataInit); this.แ(this.แ + this.แ + แ.แ("แ"), true, this.แต, SmtpState.DataEnd); this.แ(แ.แ, แ.แ("แแแแแแแแแแแแแขแฃแ"), SmtpState.DataEnd); if (closeMailServerConnection) { this.แ (); } else { this.แ(แ.แ("แปแผแฎแฝ"), true, true, SmtpState.Rset); this.แ(แ.แ, แ.แ("แปแแแแขแแฏแแแแแปแผแฎแฝ"), SmtpState.Rset); } } catch (SmtpProtocolException exception7) { flag = false; this.แ(string.Empty, exception7); } catch (SmtpConnectionException exception8) { flag = false; this.แ(string.Empty, exception8); } catch (EmailException exception9) { flag = false; this.แ(string.Empty, exception9); } catch (Exception exception10) { flag = false; this.แ(แ.แ("แแแแแแแแแแแแแแแกแแแแแแแแแแแแแแแแแแแแแแแแแแแแแผแแแแแแแแแแแแแ"), exception10); } finally { if (closeMailServerConnection) { this.แ(); } } this.แ(แ.แ("แแกแแแแแแแแแแแผแแแแแแแแแแแแแถแณ")); return flag; } |
Paul D. Murphy wrote:
Beer28 wrote: I'm not going to spend a day or 2 breaking obfuscation for your own amusement, sorry pal
Translation, "I can't, but I don't have the balls to admit I'm just running my mouth with no real idea what I'm talking about".